﻿/****** Object:  StoredProcedure [dbo].[sp_WebPlus_EMStudent_Update]    Script Date: 15/01/2024 11:34:21 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_EMStudent_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_EMStudent_Update] AS' 
END
GO




ALTER PROCEDURE [dbo].[sp_WebPlus_EMStudent_Update]
@StaffId              INTEGER,
@EngMatType           VARCHAR(8),
@ID                   INTEGER,
@PersonalTargetGrade  VARCHAR(255),
@IsStartGradeChanged  BIT,
@StartGrade           VARCHAR(20)  = null,
@StartPoints          DECIMAL(9,2) = null,
@Point1_Grade   VARCHAR(20),
@Point2_Grade   VARCHAR(20), 
@Point3_Grade   VARCHAR(20), 
@Point4_Grade   VARCHAR(20), 
@Point5_Grade   VARCHAR(20), 
@Point6_Grade   VARCHAR(20), 
@Point7_Grade   VARCHAR(20), 
@Point8_Grade   VARCHAR(20), 
@Point9_Grade   VARCHAR(20), 
@Point10_Grade  VARCHAR(20), 
@Point11_Grade  VARCHAR(20), 
@Point12_Grade  VARCHAR(20), 
@Point1_Notes   VARCHAR(1024),
@Point2_Notes   VARCHAR(1024),
@Point3_Notes   VARCHAR(1024),
@Point4_Notes   VARCHAR(1024),
@Point5_Notes   VARCHAR(1024),
@Point6_Notes   VARCHAR(1024),
@Point7_Notes   VARCHAR(1024),
@Point8_Notes   VARCHAR(1024),
@Point9_Notes   VARCHAR(1024),
@Point10_Notes  VARCHAR(1024),
@Point11_Notes  VARCHAR(1024),
@Point12_Notes  VARCHAR(1024),
@Point1_EffortID INT,
@Point2_EffortID INT,
@Point3_EffortID INT,
@Point4_EffortID INT,
@Point5_EffortID INT,
@Point6_EffortID INT,
@Point7_EffortID INT,
@Point8_EffortID INT,
@Point9_EffortID INT,
@Point10_EffortID INT,
@Point11_EffortID INT,
@Point12_EffortID INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 2/2/2023 
-- Modified:	AndyB 23/09/2023 @PersonalTargetGrade_Existing is now VARCHAR(255)
--              AndyB 11/10/2023 Create AuditTrail entries for changed values
--              AndyB 15/01/2024 Changed AuditChange value to either INSERT or UPDATE
-- Descripton:	SP to Update the EngMat_Enrolment_InYear (Grades and Notes) values
-- Example:     exec sp_WebPlus_EMStudent_Update 123, 'English', 123456, ...
-- =============================================

DECLARE @newID          INT;
DECLARE @InYearGradeID  INT;
DECLARE @AcademicYearID VARCHAR(5);
DECLARE @LearningAimRef VARCHAR(8);
DECLARE @StudentID      INT;
DECLARE @EnrolmentID    INT;
DECLARE @CourseID       INT;
DECLARE @OriginalCourseID INT;
DECLARE @UserName       VARCHAR(255);
DECLARE @UserForenames  VARCHAR(100);
DECLARE @UserSurname    VARCHAR(100);

DECLARE @RowDescription VARCHAR(500);

DECLARE @Forenames      VARCHAR(100);
DECLARE @Surname        VARCHAR(100);
DECLARE @CourseCode     VARCHAR(50);

DECLARE @StartGradeUserName   VARCHAR(100);
DECLARE @StartGradeDateTime   DATETIME;
DECLARE @StartGradeGrade      VARCHAR(20);
DECLARE @StartGradePoints     DECIMAL(9,2);

DECLARE @Point1_Grade_Existing VARCHAR(20);
DECLARE @Point2_Grade_Existing VARCHAR(20);
DECLARE @Point3_Grade_Existing VARCHAR(20);
DECLARE @Point4_Grade_Existing VARCHAR(20);
DECLARE @Point5_Grade_Existing VARCHAR(20);
DECLARE @Point6_Grade_Existing VARCHAR(20);
DECLARE @Point7_Grade_Existing VARCHAR(20);
DECLARE @Point8_Grade_Existing VARCHAR(20);
DECLARE @Point9_Grade_Existing VARCHAR(20);
DECLARE @Point10_Grade_Existing VARCHAR(20);
DECLARE @Point11_Grade_Existing VARCHAR(20);
DECLARE @Point12_Grade_Existing VARCHAR(20);

DECLARE @Point1_Notes_Existing VARCHAR(1024);
DECLARE @Point2_Notes_Existing VARCHAR(1024);
DECLARE @Point3_Notes_Existing VARCHAR(1024);
DECLARE @Point4_Notes_Existing VARCHAR(1024);
DECLARE @Point5_Notes_Existing VARCHAR(1024);
DECLARE @Point6_Notes_Existing VARCHAR(1024);
DECLARE @Point7_Notes_Existing VARCHAR(1024);
DECLARE @Point8_Notes_Existing VARCHAR(1024);
DECLARE @Point9_Notes_Existing VARCHAR(1024);
DECLARE @Point10_Notes_Existing VARCHAR(1024);
DECLARE @Point11_Notes_Existing VARCHAR(1024);
DECLARE @Point12_Notes_Existing VARCHAR(1024);

DECLARE @Point1_EffortDescription_Existing VARCHAR(100);
DECLARE @Point2_EffortDescription_Existing VARCHAR(100);
DECLARE @Point3_EffortDescription_Existing VARCHAR(100);
DECLARE @Point4_EffortDescription_Existing VARCHAR(100);
DECLARE @Point5_EffortDescription_Existing VARCHAR(100);
DECLARE @Point6_EffortDescription_Existing VARCHAR(100);
DECLARE @Point7_EffortDescription_Existing VARCHAR(100);
DECLARE @Point8_EffortDescription_Existing VARCHAR(100);
DECLARE @Point9_EffortDescription_Existing VARCHAR(100);
DECLARE @Point10_EffortDescription_Existing VARCHAR(100);
DECLARE @Point11_EffortDescription_Existing VARCHAR(100);
DECLARE @Point12_EffortDescription_Existing VARCHAR(100);

DECLARE @Point1_EffortDescription_New VARCHAR(100);
DECLARE @Point2_EffortDescription_New VARCHAR(100);
DECLARE @Point3_EffortDescription_New VARCHAR(100);
DECLARE @Point4_EffortDescription_New VARCHAR(100);
DECLARE @Point5_EffortDescription_New VARCHAR(100);
DECLARE @Point6_EffortDescription_New VARCHAR(100);
DECLARE @Point7_EffortDescription_New VARCHAR(100);
DECLARE @Point8_EffortDescription_New VARCHAR(100);
DECLARE @Point9_EffortDescription_New VARCHAR(100);
DECLARE @Point10_EffortDescription_New VARCHAR(100);
DECLARE @Point11_EffortDescription_New VARCHAR(100);
DECLARE @Point12_EffortDescription_New VARCHAR(100);

DECLARE @Point1_EffortID_Existing INT;
DECLARE @Point2_EffortID_Existing INT;
DECLARE @Point3_EffortID_Existing INT;
DECLARE @Point4_EffortID_Existing INT;
DECLARE @Point5_EffortID_Existing INT;
DECLARE @Point6_EffortID_Existing INT;
DECLARE @Point7_EffortID_Existing INT;
DECLARE @Point8_EffortID_Existing INT;
DECLARE @Point9_EffortID_Existing INT;
DECLARE @Point10_EffortID_Existing INT;
DECLARE @Point11_EffortID_Existing INT;
DECLARE @Point12_EffortID_Existing INT;

DECLARE @PersonalTargetGrade_Existing VARCHAR(255);

DECLARE @TypeOfChange VARCHAR(50);

-- ***********************************************************
--  Check if the Student ID already exists
-- ***********************************************************
IF EXISTS (SELECT 1 FROM EngMat_Enrolment_InYear WHERE EngMat_Enrolment_InYear.ID = @ID)
BEGIN

	-- ***********************************************************
	--  Set the default StartGrade values
	-- ***********************************************************
	SET @StartGradeUserName = NULL;
	SET @StartGradeDateTime = NULL;
	SET @StartGradeGrade    = NULL; -- @StartGrade;    
	SET @StartGradePoints   = NULL;

	-- ***********************************************************
	--  Get the details from the main table: EngMat_Enrolment_InYear
	-- ***********************************************************
	SELECT 
		--@EnrolmentID = EngMatEnrolment.ID,
		@AcademicYearID = EngMat_Enrolment_InYear.AcademicYearID,
		@Forenames = ISNULL(EngMat_Enrolment_InYear.Forenames, ''),
		@Surname = ISNULL(EngMat_Enrolment_InYear.Surname, ''),
		@CourseCode = ISNULL(EngMat_Enrolment_InYear.CourseCode, ''),
		@StudentID = EngMat_Enrolment_InYear.EngMatStudentID,
		@EnrolmentID = EngMat_Enrolment_InYear.ID,
		@LearningAimRef = EngMat_Enrolment_InYear.LearningAimRef,
		@CourseID = EngMat_Enrolment_InYear.CourseID,
		@OriginalCourseID = OGP_Enrolment.OriginalCourseID,
		@PersonalTargetGrade_Existing = ISNULL(EngMat_Enrolment_InYear.PersonalTargetGrade, ''),
		--
		@Point1_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade1, ''),
		@Point2_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade2, ''),
		@Point3_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade3, ''),
		@Point4_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade4, ''),
		@Point5_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade5, ''),
		@Point6_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade6, ''),
		@Point7_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade7, ''),
		@Point8_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade8, ''),
		@Point9_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade9, ''),
		@Point10_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade10, ''),
		@Point11_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade11, ''),
		@Point12_Grade_Existing = ISNULL(EngMat_Enrolment_InYear.IYGrade12, ''),
		--
		@Point1_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point1_Notes, ''),
		@Point2_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point2_Notes, ''),
		@Point3_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point3_Notes, ''),
		@Point4_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point4_Notes, ''),
		@Point5_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point5_Notes, ''),
		@Point6_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point6_Notes, ''),
		@Point7_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point7_Notes, ''),
		@Point8_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point8_Notes, ''),
		@Point9_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point9_Notes, ''),
		@Point10_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point10_Notes, ''),
		@Point11_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point11_Notes, ''),
		@Point12_Notes_Existing = ISNULL(EngMat_Enrolment_InYear.Point12_Notes, ''),
--
		@Point1_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point1_EffortDescription, ''),
		@Point2_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point2_EffortDescription, ''),
		@Point3_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point3_EffortDescription, ''),
		@Point4_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point4_EffortDescription, ''),
		@Point5_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point5_EffortDescription, ''),
		@Point6_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point6_EffortDescription, ''),
		@Point7_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point7_EffortDescription, ''),
		@Point8_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point8_EffortDescription, ''),
		@Point9_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point9_EffortDescription, ''),
		@Point10_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point10_EffortDescription, ''),
		@Point11_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point11_EffortDescription, ''),
		@Point12_EffortDescription_Existing = ISNULL(EngMat_Enrolment_InYear.Point12_EffortDescription, '')
	 FROM 
		EngMat_Enrolment_InYear 
				INNER JOIN OGP_Enrolment  ON OGP_Enrolment.StudentRef = EngMat_Enrolment_InYear.StudentRef AND 
				                             OGP_Enrolment.AcademicYearID = EngMat_Enrolment_InYear.AcademicYearID AND
											 OGP_Enrolment.CourseID = EngMat_Enrolment_InYear.CourseID

		--	INNER JOIN EngMatEnrolment ON
		--		EngMatEnrolment.EngMatStudentID = EngMat_Enrolment_InYear.EngMatStudentID AND 
		--		EngMatEnrolment.CourseID = EngMat_Enrolment_InYear.CourseID
	 WHERE 
		EngMat_Enrolment_InYear.ID = @ID; 


	-- ***********************************************************
	--  Get the EffortGrade Description from the ID
	-- ***********************************************************
	SELECT @Point1_EffortDescription_New = '';
	SELECT @Point2_EffortDescription_New = '';
	SELECT @Point3_EffortDescription_New = '';
	SELECT @Point4_EffortDescription_New = '';
	SELECT @Point5_EffortDescription_New = '';
	SELECT @Point6_EffortDescription_New = '';
	SELECT @Point7_EffortDescription_New = '';
	SELECT @Point8_EffortDescription_New = '';
	SELECT @Point9_EffortDescription_New = '';
	SELECT @Point10_EffortDescription_New = '';
	SELECT @Point11_EffortDescription_New = '';
	SELECT @Point12_EffortDescription_New = '';

	SELECT @Point1_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point1_EffortID, 0);
	SELECT @Point2_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point2_EffortID, 0);
	SELECT @Point3_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point3_EffortID, 0);
	SELECT @Point4_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point4_EffortID, 0);
	SELECT @Point5_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point5_EffortID, 0);
	SELECT @Point6_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point6_EffortID, 0);
	SELECT @Point7_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point7_EffortID, 0);
	SELECT @Point8_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point8_EffortID, 0);
	SELECT @Point9_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point9_EffortID, 0);
	SELECT @Point10_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point10_EffortID, 0);
	SELECT @Point11_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point11_EffortID, 0);
	SELECT @Point12_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point12_EffortID, 0);


	-- ***********************************************************
	--  Get the Staff Username
	-- SELECT @UserName = StaffCode FROM Staff WHERE StaffID = @StaffId;
	-- ***********************************************************
	SELECT 
		@UserName = StaffCode,
		@UserForenames = [User].Forenames,
		@UserSurname = [User].Surname
	    --[User].Forenames AS UserForenames, [User].Surname AS UserSurname
	FROM Staff 
		INNER JOIN [User] ON [User].UserName = Staff.StaffCode
	WHERE StaffID = @StaffId;


	-- ***********************************************************
	--  Always update the Start Grade (if set to something)
	-- ***********************************************************
	IF @StartGrade IS NOT NULL
	BEGIN
		SET @StartGradeGrade = @StartGrade;
	END


	-- ***********************************************************
	--  Set the Other StartGrade values based on the parameters
	-- ***********************************************************
	IF @IsStartGradeChanged = 1
	BEGIN
		SET @StartGradeUserName = (@UserForenames + ' ' + @UserSurname);
		SET @StartGradeDateTime = GETDATE();
		SET @StartGradePoints = @StartPoints;
	END


	-- ***********************************************************
	--  Create the EngMatInYearGrade record if it doesnt exist
	-- ***********************************************************
	SELECT 
		@InYearGradeID = EngMatInYearGrade.ID 
	FROM 
		EngMatInYearGrade 
	WHERE 
		AcademicYearID  = @AcademicYearID    AND 
		CourseID        = @OriginalCourseID  AND
		EngMatStudentID = @StudentID;

	IF @InYearGradeID IS NULL
	BEGIN
		INSERT INTO EngMatInYearGrade 
			(AcademicYearID, EngMatStudentID, CourseID, 
			 Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
			 Point1_Grade_Updated, Point2_Grade_Updated, Point3_Grade_Updated, Point4_Grade_Updated, Point5_Grade_Updated, Point6_Grade_Updated, Point7_Grade_Updated, Point8_Grade_Updated, Point9_Grade_Updated, Point10_Grade_Updated, Point11_Grade_Updated, Point12_Grade_Updated, 
			 PersonalTargetGrade,
			 Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, 
			 LearningAimRef,
			 Point1_EffortID, Point2_EffortID, Point3_EffortID, Point4_EffortID, Point5_EffortID, Point6_EffortID, Point7_EffortID, Point8_EffortID, Point9_EffortID, Point10_EffortID, Point11_EffortID, Point12_EffortID,
			 OGHighestPreviousGCSEGrade, OGHighestPreviousGCSEPoints, OGHighestPreviousGCSEGradeSavedBy, OGHighestPreviousGCSEGradeSavedWhen 
			 ) 
		VALUES 
			(
				--Note: we write the Orig Course ID
				@AcademicYearID, @StudentID, @OriginalCourseID,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
				@PersonalTargetGrade,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				@LearningAimRef,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				NULL, NULL, NULL, NULL
			);
		
		--get the new ID
		SELECT @InYearGradeID = SCOPE_IDENTITY();
	END

	-- ***********************************************************
	--  Update the EngMatInYearGrade table
	-- ***********************************************************
	UPDATE 
		EngMatInYearGrade
	SET 
		PersonalTargetGrade = (IIF(@PersonalTargetGrade = '', Null, @PersonalTargetGrade)),
		LearningAimRef = @LearningAimRef,

		Point1_Grade = (IIF(@Point1_Grade = '', Null, @Point1_Grade)),
		Point2_Grade = (IIF(@Point2_Grade = '', Null, @Point2_Grade)),
		Point3_Grade = (IIF(@Point3_Grade = '', Null, @Point3_Grade)),
		Point4_Grade = (IIF(@Point4_Grade = '', Null, @Point4_Grade)),
		Point5_Grade = (IIF(@Point5_Grade = '', Null, @Point5_Grade)),
		Point6_Grade = (IIF(@Point6_Grade = '', Null, @Point6_Grade)),
		Point7_Grade = (IIF(@Point7_Grade = '', Null, @Point7_Grade)),
		Point8_Grade = (IIF(@Point8_Grade = '', Null, @Point8_Grade)),
		Point9_Grade = (IIF(@Point9_Grade = '', Null, @Point9_Grade)),
		Point10_Grade = (IIF(@Point10_Grade = '', Null, @Point10_Grade)),
		Point11_Grade = (IIF(@Point11_Grade = '', Null, @Point11_Grade)),
		Point12_Grade = (IIF(@Point12_Grade = '', Null, @Point12_Grade)),

		Point1_Grade_Updated = (CASE WHEN @Point1_Grade_Existing = @Point1_Grade THEN 0 ELSE 1 END),
		Point2_Grade_Updated = (CASE WHEN @Point2_Grade_Existing = @Point2_Grade THEN 0 ELSE 1 END),
		Point3_Grade_Updated = (CASE WHEN @Point3_Grade_Existing = @Point3_Grade THEN 0 ELSE 1 END),
		Point4_Grade_Updated = (CASE WHEN @Point4_Grade_Existing = @Point4_Grade THEN 0 ELSE 1 END),
		Point5_Grade_Updated = (CASE WHEN @Point5_Grade_Existing = @Point5_Grade THEN 0 ELSE 1 END),
		Point6_Grade_Updated = (CASE WHEN @Point6_Grade_Existing = @Point6_Grade THEN 0 ELSE 1 END),
		Point7_Grade_Updated = (CASE WHEN @Point7_Grade_Existing = @Point7_Grade THEN 0 ELSE 1 END),
		Point8_Grade_Updated = (CASE WHEN @Point8_Grade_Existing = @Point8_Grade THEN 0 ELSE 1 END),
		Point9_Grade_Updated = (CASE WHEN @Point9_Grade_Existing = @Point9_Grade THEN 0 ELSE 1 END),
		Point10_Grade_Updated = (CASE WHEN @Point10_Grade_Existing = @Point10_Grade THEN 0 ELSE 1 END),
		Point11_Grade_Updated = (CASE WHEN @Point11_Grade_Existing = @Point11_Grade THEN 0 ELSE 1 END),
		Point12_Grade_Updated = (CASE WHEN @Point12_Grade_Existing = @Point12_Grade THEN 0 ELSE 1 END),

		Point1_Notes = (IIF(@Point1_Notes = '', Null, @Point1_Notes)),
		Point2_Notes = (IIF(@Point2_Notes = '', Null, @Point2_Notes)),
		Point3_Notes = (IIF(@Point3_Notes = '', Null, @Point3_Notes)),
		Point4_Notes = (IIF(@Point4_Notes = '', Null, @Point4_Notes)),
		Point5_Notes = (IIF(@Point5_Notes = '', Null, @Point5_Notes)),
		Point6_Notes = (IIF(@Point6_Notes = '', Null, @Point6_Notes)),
		Point7_Notes = (IIF(@Point7_Notes = '', Null, @Point7_Notes)),
		Point8_Notes = (IIF(@Point8_Notes = '', Null, @Point8_Notes)),
		Point9_Notes = (IIF(@Point9_Notes = '', Null, @Point9_Notes)),
		Point10_Notes = (IIF(@Point10_Notes = '', Null, @Point10_Notes)),
		Point11_Notes = (IIF(@Point11_Notes = '', Null, @Point11_Notes)),
		Point12_Notes = (IIF(@Point12_Notes = '', Null, @Point12_Notes)),

		Point1_EffortID = (IIF(@Point1_EffortID <= 0, Null, @Point1_EffortID)),
		Point2_EffortID = (IIF(@Point2_EffortID <= 0, Null, @Point2_EffortID)),
		Point3_EffortID = (IIF(@Point3_EffortID <= 0, Null, @Point3_EffortID)),
		Point4_EffortID = (IIF(@Point4_EffortID <= 0, Null, @Point4_EffortID)),
		Point5_EffortID = (IIF(@Point5_EffortID <= 0, Null, @Point5_EffortID)),
		Point6_EffortID = (IIF(@Point6_EffortID <= 0, Null, @Point6_EffortID)),
		Point7_EffortID = (IIF(@Point7_EffortID <= 0, Null, @Point7_EffortID)),
		Point8_EffortID = (IIF(@Point8_EffortID <= 0, Null, @Point8_EffortID)),
		Point9_EffortID = (IIF(@Point9_EffortID <= 0, Null, @Point9_EffortID)),
		Point10_EffortID = (IIF(@Point10_EffortID <= 0, Null, @Point10_EffortID)),
		Point11_EffortID = (IIF(@Point11_EffortID <= 0, Null, @Point11_EffortID)),
		Point12_EffortID = (IIF(@Point12_EffortID <= 0, Null, @Point12_EffortID)),

		OGHighestPreviousGCSEGrade = @StartGradeGrade, 
		OGHighestPreviousGCSEPoints = @StartGradePoints, 
		OGHighestPreviousGCSEGradeSavedBy =  @StartGradeUserName,    
		OGHighestPreviousGCSEGradeSavedWhen  = @StartGradeDateTime
	WHERE
		ID = @InYearGradeID;


	-- ***********************************************************
	--  Populate EnrolmentWebSave
	-- ***********************************************************
	DELETE FROM EngMatEnrolmentWebSave WHERE EngMatEnrolmentID = @EnrolmentID AND UserName = @UserName;
	INSERT INTO EngMatEnrolmentWebSave (EngMatEnrolmentID, UserName) VALUES (@EnrolmentID, @UserName);


	-- ***********************************************************
	--  Regenerate the EngMat data 
	--  We now do this separately to speed up the whole process i.e. when multiple Student changes
	-- ***********************************************************
	--EXEC sp_EngMat_Populate_Summary_Tables @EngMatType, 1, @UserName


	-- ***********************************************************
	--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
	-- ***********************************************************
	SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);


	-- ***********************************************************
	--  Create Audit entries for the changed Grade fields
	-- ***********************************************************
	IF @Point1_Grade != @Point1_Grade_Existing BEGIN
	    IF IsNull(@Point1_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_Grade', null, null, @Point1_Grade_Existing, @Point1_Grade)
	END
	IF @Point2_Grade != @Point2_Grade_Existing BEGIN
	    IF IsNull(@Point2_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_Grade', null, null, @Point2_Grade_Existing, @Point2_Grade)
	END
	IF @Point3_Grade != @Point3_Grade_Existing BEGIN
	    IF IsNull(@Point3_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_Grade', null, null, @Point3_Grade_Existing, @Point3_Grade)
	END
	IF @Point4_Grade != @Point4_Grade_Existing BEGIN
	    IF IsNull(@Point4_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_Grade', null, null, @Point4_Grade_Existing, @Point4_Grade)
	END
	IF @Point5_Grade != @Point5_Grade_Existing BEGIN
	    IF IsNull(@Point5_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_Grade', null, null, @Point5_Grade_Existing, @Point5_Grade)
	END
	IF @Point6_Grade != @Point6_Grade_Existing BEGIN
	    IF IsNull(@Point6_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_Grade', null, null, @Point6_Grade_Existing, @Point6_Grade)
	END
	IF @Point7_Grade != @Point7_Grade_Existing BEGIN
	    IF IsNull(@Point7_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_Grade', null, null, @Point7_Grade_Existing, @Point7_Grade)
	END
	IF @Point8_Grade != @Point8_Grade_Existing BEGIN
	    IF IsNull(@Point8_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_Grade', null, null, @Point8_Grade_Existing, @Point8_Grade)
	END
	IF @Point9_Grade != @Point9_Grade_Existing BEGIN
	    IF IsNull(@Point9_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_Grade', null, null, @Point9_Grade_Existing, @Point9_Grade)
	END
	IF @Point10_Grade != @Point10_Grade_Existing BEGIN
	    IF IsNull(@Point10_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_Grade', null, null, @Point10_Grade_Existing, @Point10_Grade)
	END
	IF @Point11_Grade != @Point11_Grade_Existing BEGIN
	    IF IsNull(@Point11_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_Grade', null, null, @Point11_Grade_Existing, @Point11_Grade)
	END
	IF @Point12_Grade != @Point12_Grade_Existing BEGIN
	    IF IsNull(@Point12_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_Grade', null, null, @Point12_Grade_Existing, @Point12_Grade)
	END


	-- ***********************************************************
	--   Create Audit entries for the changed Notes fields
	-- ***********************************************************
	IF @Point1_Notes != @Point1_Notes_Existing BEGIN
	    IF IsNull(@Point1_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_Notes', null, null, @Point1_Notes_Existing, @Point1_Notes)
	END
	IF @Point2_Notes != @Point2_Notes_Existing BEGIN
	    IF IsNull(@Point2_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_Notes', null, null, @Point2_Notes_Existing, @Point2_Notes)
	END
	IF @Point3_Notes != @Point3_Notes_Existing BEGIN
	    IF IsNull(@Point3_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_Notes', null, null, @Point3_Notes_Existing, @Point3_Notes)
	END
	IF @Point4_Notes != @Point4_Notes_Existing BEGIN
	    IF IsNull(@Point4_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_Notes', null, null, @Point4_Notes_Existing, @Point4_Notes)
	END
	IF @Point5_Notes != @Point5_Notes_Existing BEGIN
	    IF IsNull(@Point5_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_Notes', null, null, @Point5_Notes_Existing, @Point5_Notes)
	END
	IF @Point6_Notes != @Point6_Notes_Existing BEGIN
	    IF IsNull(@Point6_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_Notes', null, null, @Point6_Notes_Existing, @Point6_Notes)
	END
	IF @Point7_Notes != @Point7_Notes_Existing BEGIN
	    IF IsNull(@Point7_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_Notes', null, null, @Point7_Notes_Existing, @Point7_Notes)
	END
	IF @Point8_Notes != @Point8_Notes_Existing BEGIN
	    IF IsNull(@Point8_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_Notes', null, null, @Point8_Notes_Existing, @Point8_Notes)
	END
	IF @Point9_Notes != @Point9_Notes_Existing BEGIN
	    IF IsNull(@Point9_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_Notes', null, null, @Point9_Notes_Existing, @Point9_Notes)
	END
	IF @Point10_Notes != @Point10_Notes_Existing BEGIN
	    IF IsNull(@Point10_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_Notes', null, null, @Point10_Notes_Existing, @Point10_Notes)
	END
	IF @Point11_Notes != @Point11_Notes_Existing BEGIN
	    IF IsNull(@Point11_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_Notes', null, null, @Point11_Notes_Existing, @Point11_Notes)
	END
	IF @Point12_Notes != @Point12_Notes_Existing BEGIN
	    IF IsNull(@Point12_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_Notes', null, null, @Point12_Notes_Existing, @Point12_Notes)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed EffortGrade fields
	-- ***********************************************************
	IF @Point1_EffortDescription_New != @Point1_EffortDescription_Existing BEGIN
	    IF IsNull(@Point1_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point1_EffortID', null, null, @Point1_EffortDescription_Existing, @Point1_EffortDescription_New)
	END
	IF @Point2_EffortDescription_New != @Point2_EffortDescription_Existing BEGIN
	    IF IsNull(@Point2_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point2_EffortID', null, null, @Point2_EffortDescription_Existing, @Point2_EffortDescription_New)
	END
	IF @Point3_EffortDescription_New != @Point3_EffortDescription_Existing BEGIN
	    IF IsNull(@Point3_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point3_EffortID', null, null, @Point3_EffortDescription_Existing, @Point3_EffortDescription_New)
	END
	IF @Point4_EffortDescription_New != @Point4_EffortDescription_Existing BEGIN
	    IF IsNull(@Point4_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point4_EffortID', null, null, @Point4_EffortDescription_Existing, @Point4_EffortDescription_New)
	END
	IF @Point5_EffortDescription_New != @Point5_EffortDescription_Existing BEGIN
	    IF IsNull(@Point5_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point5_EffortID', null, null, @Point5_EffortDescription_Existing, @Point5_EffortDescription_New)
	END
	IF @Point6_EffortDescription_New != @Point6_EffortDescription_Existing BEGIN
	    IF IsNull(@Point6_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point6_EffortID', null, null, @Point6_EffortDescription_Existing, @Point6_EffortDescription_New)
	END
	IF @Point7_EffortDescription_New != @Point7_EffortDescription_Existing BEGIN
	    IF IsNull(@Point7_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point7_EffortID', null, null, @Point7_EffortDescription_Existing, @Point7_EffortDescription_New)
	END
	IF @Point8_EffortDescription_New != @Point8_EffortDescription_Existing BEGIN
	    IF IsNull(@Point8_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point8_EffortID', null, null, @Point8_EffortDescription_Existing, @Point8_EffortDescription_New)
	END
	IF @Point9_EffortDescription_New != @Point9_EffortDescription_Existing BEGIN
	    IF IsNull(@Point9_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point9_EffortID', null, null, @Point9_EffortDescription_Existing, @Point9_EffortDescription_New)
	END
	IF @Point10_EffortDescription_New != @Point10_EffortDescription_Existing BEGIN
	    IF IsNull(@Point10_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point10_EffortID', null, null, @Point10_EffortDescription_Existing, @Point10_EffortDescription_New)
	END
	IF @Point11_EffortDescription_New != @Point11_EffortDescription_Existing BEGIN
	    IF IsNull(@Point11_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point11_EffortID', null, null, @Point11_EffortDescription_Existing, @Point11_EffortDescription_New)
	END
	IF @Point12_EffortDescription_New != @Point12_EffortDescription_Existing BEGIN
	    IF IsNull(@Point12_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'Point12_EffortID', null, null, @Point12_EffortDescription_Existing, @Point12_EffortDescription_New)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed PersonalTargetGrade fields
	-- ***********************************************************
	IF @PersonalTargetGrade != @PersonalTargetGrade_Existing BEGIN
	    IF IsNull(@PersonalTargetGrade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'EngMatInYearGrade', @InYearGradeID, @RowDescription, 'PersonalTargetGrade', null, null, @PersonalTargetGrade_Existing, @PersonalTargetGrade)
	END	


	-- ***********************************************************
	--  Return 1 for success
	-- ***********************************************************
	SELECT 1;

END
ELSE
BEGIN
    --ID doesnt exist so return -1
	SELECT -1;
END

GO

/****** Object:  StoredProcedure [dbo].[sp_WebPlus_VAStudent_Update]    Script Date: 15/01/2024 11:34:21 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_VAStudent_Update]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_VAStudent_Update] AS' 
END
GO





ALTER PROCEDURE [dbo].[sp_WebPlus_VAStudent_Update]
@StaffId        INTEGER,
@EstactVAID     INTEGER,
@PersonalTargetGrade   VARCHAR(255),
@Point1_Grade   VARCHAR(20),
@Point2_Grade   VARCHAR(20), 
@Point3_Grade   VARCHAR(20), 
@Point4_Grade   VARCHAR(20), 
@Point5_Grade   VARCHAR(20), 
@Point6_Grade   VARCHAR(20), 
@Point7_Grade   VARCHAR(20), 
@Point8_Grade   VARCHAR(20), 
@Point9_Grade   VARCHAR(20), 
@Point10_Grade  VARCHAR(20), 
@Point11_Grade  VARCHAR(20), 
@Point12_Grade  VARCHAR(20), 
@Point1_Notes   VARCHAR(1024),
@Point2_Notes   VARCHAR(1024),
@Point3_Notes   VARCHAR(1024),
@Point4_Notes   VARCHAR(1024),
@Point5_Notes   VARCHAR(1024),
@Point6_Notes   VARCHAR(1024),
@Point7_Notes   VARCHAR(1024),
@Point8_Notes   VARCHAR(1024),
@Point9_Notes   VARCHAR(1024),
@Point10_Notes  VARCHAR(1024),
@Point11_Notes  VARCHAR(1024),
@Point12_Notes  VARCHAR(1024),
@Point1_EffortID INT,
@Point2_EffortID INT,
@Point3_EffortID INT,
@Point4_EffortID INT,
@Point5_EffortID INT,
@Point6_EffortID INT,
@Point7_EffortID INT,
@Point8_EffortID INT,
@Point9_EffortID INT,
@Point10_EffortID INT,
@Point11_EffortID INT,
@Point12_EffortID INT

AS
-- =============================================
-- Author:		Andrew Breward
-- Created:     AndyB 2/2/2023 
-- Modified:	AndyB 23/09/2023 @PersonalTargetGrade_Existing is now VARCHAR(255)
--              AndyB 11/10/2023 Create AuditTrail entries for changed values
--              AndyB 15/01/2024 Changed AuditChange value to either INSERT or UPDATE
-- Descripton:	SP to Update the EstactVA (Grades and Notes) values
-- Example:     exec sp_WebPlus_VAStudent_Update
-- =============================================

DECLARE @newID          INT;
DECLARE @InYearGradeID  INT;
DECLARE @AcademicYearID VARCHAR(5);
DECLARE @LearningAimRef VARCHAR(8);
DECLARE @StudentID      INT;
DECLARE @EnrolmentID    INT;
DECLARE @CourseID       INT;
DECLARE @OriginalCourseID INT;
DECLARE @UserName       VARCHAR(255);

DECLARE @RowDescription VARCHAR(500);

DECLARE @Forenames      VARCHAR(100);
DECLARE @Surname        VARCHAR(100);
DECLARE @CourseCode     VARCHAR(50);

DECLARE @Point1_Grade_Existing VARCHAR(20);
DECLARE @Point2_Grade_Existing VARCHAR(20);
DECLARE @Point3_Grade_Existing VARCHAR(20);
DECLARE @Point4_Grade_Existing VARCHAR(20);
DECLARE @Point5_Grade_Existing VARCHAR(20);
DECLARE @Point6_Grade_Existing VARCHAR(20);
DECLARE @Point7_Grade_Existing VARCHAR(20);
DECLARE @Point8_Grade_Existing VARCHAR(20);
DECLARE @Point9_Grade_Existing VARCHAR(20);
DECLARE @Point10_Grade_Existing VARCHAR(20);
DECLARE @Point11_Grade_Existing VARCHAR(20);
DECLARE @Point12_Grade_Existing VARCHAR(20);

DECLARE @Point1_Notes_Existing VARCHAR(1024);
DECLARE @Point2_Notes_Existing VARCHAR(1024);
DECLARE @Point3_Notes_Existing VARCHAR(1024);
DECLARE @Point4_Notes_Existing VARCHAR(1024);
DECLARE @Point5_Notes_Existing VARCHAR(1024);
DECLARE @Point6_Notes_Existing VARCHAR(1024);
DECLARE @Point7_Notes_Existing VARCHAR(1024);
DECLARE @Point8_Notes_Existing VARCHAR(1024);
DECLARE @Point9_Notes_Existing VARCHAR(1024);
DECLARE @Point10_Notes_Existing VARCHAR(1024);
DECLARE @Point11_Notes_Existing VARCHAR(1024);
DECLARE @Point12_Notes_Existing VARCHAR(1024);

DECLARE @Point1_EffortDescription_Existing VARCHAR(100);
DECLARE @Point2_EffortDescription_Existing VARCHAR(100);
DECLARE @Point3_EffortDescription_Existing VARCHAR(100);
DECLARE @Point4_EffortDescription_Existing VARCHAR(100);
DECLARE @Point5_EffortDescription_Existing VARCHAR(100);
DECLARE @Point6_EffortDescription_Existing VARCHAR(100);
DECLARE @Point7_EffortDescription_Existing VARCHAR(100);
DECLARE @Point8_EffortDescription_Existing VARCHAR(100);
DECLARE @Point9_EffortDescription_Existing VARCHAR(100);
DECLARE @Point10_EffortDescription_Existing VARCHAR(100);
DECLARE @Point11_EffortDescription_Existing VARCHAR(100);
DECLARE @Point12_EffortDescription_Existing VARCHAR(100);

DECLARE @Point1_EffortDescription_New VARCHAR(100);
DECLARE @Point2_EffortDescription_New VARCHAR(100);
DECLARE @Point3_EffortDescription_New VARCHAR(100);
DECLARE @Point4_EffortDescription_New VARCHAR(100);
DECLARE @Point5_EffortDescription_New VARCHAR(100);
DECLARE @Point6_EffortDescription_New VARCHAR(100);
DECLARE @Point7_EffortDescription_New VARCHAR(100);
DECLARE @Point8_EffortDescription_New VARCHAR(100);
DECLARE @Point9_EffortDescription_New VARCHAR(100);
DECLARE @Point10_EffortDescription_New VARCHAR(100);
DECLARE @Point11_EffortDescription_New VARCHAR(100);
DECLARE @Point12_EffortDescription_New VARCHAR(100);

DECLARE @Point1_EffortID_Existing INT;
DECLARE @Point2_EffortID_Existing INT;
DECLARE @Point3_EffortID_Existing INT;
DECLARE @Point4_EffortID_Existing INT;
DECLARE @Point5_EffortID_Existing INT;
DECLARE @Point6_EffortID_Existing INT;
DECLARE @Point7_EffortID_Existing INT;
DECLARE @Point8_EffortID_Existing INT;
DECLARE @Point9_EffortID_Existing INT;
DECLARE @Point10_EffortID_Existing INT;
DECLARE @Point11_EffortID_Existing INT;
DECLARE @Point12_EffortID_Existing INT;

DECLARE @PersonalTargetGrade_Existing VARCHAR(255);

DECLARE @TypeOfChange VARCHAR(50);

-- ***********************************************************
--  Check if the Student ID already exists
-- ***********************************************************
IF EXISTS (SELECT 1 FROM EstActVA WHERE EstactVA.ID = @EstactVAID)
BEGIN
    Print 'EstactVAID Exists';

	-- ***********************************************************
	--  Get the details from the main table: EstactVA
	-- ***********************************************************
	SELECT 
		@AcademicYearID = EstactVA.AcademicYearID,
		@Forenames = ISNULL(EstactVA.Forenames, ''),
		@Surname = ISNULL(EstactVA.Surname, ''),
		@CourseCode = ISNULL(EstactVA.CourseCode, ''),
		@StudentID = Enrolment.StudentID,
		@EnrolmentID = Enrolment.ID,
		@LearningAimRef = Enrolment.LearningAimRef,
		@CourseID = Enrolment.CourseID,
		@OriginalCourseID = OGP_Enrolment.OriginalCourseID,
		@PersonalTargetGrade_Existing = ISNULL(EstactVA.PersonalTargetGrade, ''),
--
		@Point1_Grade_Existing = ISNULL(EstactVA.Point1_Grade, ''),
		@Point2_Grade_Existing = ISNULL(EstactVA.Point2_Grade, ''),
		@Point3_Grade_Existing = ISNULL(EstactVA.Point3_Grade, ''),
		@Point4_Grade_Existing = ISNULL(EstactVA.Point4_Grade, ''),
		@Point5_Grade_Existing = ISNULL(EstactVA.Point5_Grade, ''),
		@Point6_Grade_Existing = ISNULL(EstactVA.Point6_Grade, ''),
		@Point7_Grade_Existing = ISNULL(EstactVA.Point7_Grade, ''),
		@Point8_Grade_Existing = ISNULL(EstactVA.Point8_Grade, ''),
		@Point9_Grade_Existing = ISNULL(EstactVA.Point9_Grade, ''),
		@Point10_Grade_Existing = ISNULL(EstactVA.Point10_Grade, ''),
		@Point11_Grade_Existing = ISNULL(EstactVA.Point11_Grade, ''),
		@Point12_Grade_Existing = ISNULL(EstactVA.Point12_Grade, ''),
--		
		@Point1_Notes_Existing = ISNULL(EstactVA.Point1_Notes, ''),
		@Point2_Notes_Existing = ISNULL(EstactVA.Point2_Notes, ''),
		@Point3_Notes_Existing = ISNULL(EstactVA.Point3_Notes, ''),
		@Point4_Notes_Existing = ISNULL(EstactVA.Point4_Notes, ''),
		@Point5_Notes_Existing = ISNULL(EstactVA.Point5_Notes, ''),
		@Point6_Notes_Existing = ISNULL(EstactVA.Point6_Notes, ''),
		@Point7_Notes_Existing = ISNULL(EstactVA.Point7_Notes, ''),
		@Point8_Notes_Existing = ISNULL(EstactVA.Point8_Notes, ''),
		@Point9_Notes_Existing = ISNULL(EstactVA.Point9_Notes, ''),
		@Point10_Notes_Existing = ISNULL(EstactVA.Point10_Notes, ''),
		@Point11_Notes_Existing = ISNULL(EstactVA.Point11_Notes, ''),
		@Point12_Notes_Existing = ISNULL(EstactVA.Point12_Notes, ''),
--
		@Point1_EffortDescription_Existing = ISNULL(EstActVA.Point1_EffortDescription, ''),
		@Point2_EffortDescription_Existing = ISNULL(EstActVA.Point2_EffortDescription, ''),
		@Point3_EffortDescription_Existing = ISNULL(EstActVA.Point3_EffortDescription, ''),
		@Point4_EffortDescription_Existing = ISNULL(EstActVA.Point4_EffortDescription, ''),
		@Point5_EffortDescription_Existing = ISNULL(EstActVA.Point5_EffortDescription, ''),
		@Point6_EffortDescription_Existing = ISNULL(EstActVA.Point6_EffortDescription, ''),
		@Point7_EffortDescription_Existing = ISNULL(EstActVA.Point7_EffortDescription, ''),
		@Point8_EffortDescription_Existing = ISNULL(EstActVA.Point8_EffortDescription, ''),
		@Point9_EffortDescription_Existing = ISNULL(EstActVA.Point9_EffortDescription, ''),
		@Point10_EffortDescription_Existing = ISNULL(EstActVA.Point10_EffortDescription, ''),
		@Point11_EffortDescription_Existing = ISNULL(EstActVA.Point11_EffortDescription, ''),
		@Point12_EffortDescription_Existing = ISNULL(EstActVA.Point12_EffortDescription, '')
	 FROM 
		EstactVA 
			INNER JOIN Enrolment ON Enrolment.ID = EstactVA.ID
				INNER JOIN OGP_Enrolment  ON OGP_Enrolment.StudentRef = Enrolment.StudentRef AND 
				                             OGP_Enrolment.AcademicYearID = Enrolment.AcademicYearID AND
											 OGP_Enrolment.CourseID = Enrolment.CourseID
	 WHERE 
		EstactVA.ID = @EstactVAID; 


	-- ***********************************************************
	--  Get the EffortGrade Description from the ID
	-- ***********************************************************
	SELECT @Point1_EffortDescription_New = '';
	SELECT @Point2_EffortDescription_New = '';
	SELECT @Point3_EffortDescription_New = '';
	SELECT @Point4_EffortDescription_New = '';
	SELECT @Point5_EffortDescription_New = '';
	SELECT @Point6_EffortDescription_New = '';
	SELECT @Point7_EffortDescription_New = '';
	SELECT @Point8_EffortDescription_New = '';
	SELECT @Point9_EffortDescription_New = '';
	SELECT @Point10_EffortDescription_New = '';
	SELECT @Point11_EffortDescription_New = '';
	SELECT @Point12_EffortDescription_New = '';

	SELECT @Point1_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point1_EffortID, 0);
	SELECT @Point2_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point2_EffortID, 0);
	SELECT @Point3_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point3_EffortID, 0);
	SELECT @Point4_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point4_EffortID, 0);
	SELECT @Point5_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point5_EffortID, 0);
	SELECT @Point6_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point6_EffortID, 0);
	SELECT @Point7_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point7_EffortID, 0);
	SELECT @Point8_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point8_EffortID, 0);
	SELECT @Point9_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point9_EffortID, 0);
	SELECT @Point10_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point10_EffortID, 0);
	SELECT @Point11_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point11_EffortID, 0);
	SELECT @Point12_EffortDescription_New = ISNULL(DESCRIPTION, '') FROM InYearGradeEffort WHERE ID = ISNULL(@Point12_EffortID, 0);


	-- ***********************************************************
	--  Get the Staff Username
	-- ***********************************************************
	SELECT @UserName = StaffCode FROM Staff WHERE StaffID = @StaffId;


	-- ***********************************************************
	--  Create the InYearGrade record if it doesnt exist
	-- ***********************************************************
	SELECT 
		@InYearGradeID = InYearGrade.ID 
	FROM 
		InYearGrade 
	WHERE 
		AcademicYearID = @AcademicYearID    AND 
		CourseID       = @OriginalCourseID  AND
		StudentID      = @StudentID;

	IF @InYearGradeID IS NULL
	BEGIN
		Print '@InYearGradeID IS NULL';

		INSERT INTO InYearGrade 
			(AcademicYearID, StudentID, CourseID, 
			 Point1_Grade, Point2_Grade, Point3_Grade, Point4_Grade, Point5_Grade, Point6_Grade, Point7_Grade, Point8_Grade, Point9_Grade, Point10_Grade, Point11_Grade, Point12_Grade,
			 Point1_Grade_Updated, Point2_Grade_Updated, Point3_Grade_Updated, Point4_Grade_Updated, Point5_Grade_Updated, Point6_Grade_Updated, Point7_Grade_Updated, Point8_Grade_Updated, Point9_Grade_Updated, Point10_Grade_Updated, Point11_Grade_Updated, Point12_Grade_Updated, 
			 PersonalTargetGrade,
			 Point1_Notes, Point2_Notes, Point3_Notes, Point4_Notes, Point5_Notes, Point6_Notes, Point7_Notes, Point8_Notes, Point9_Notes, Point10_Notes, Point11_Notes, Point12_Notes, 
			 LearningAimRef,
			 Point1_EffortID, Point2_EffortID, Point3_EffortID, Point4_EffortID, Point5_EffortID, Point6_EffortID, Point7_EffortID, Point8_EffortID, Point9_EffortID, Point10_EffortID, Point11_EffortID, Point12_EffortID 
			 ) 
		VALUES 
			(
				--Note: we write the Orig Course ID
				@AcademicYearID, @StudentID, @OriginalCourseID,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
				Null,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
				null,
				NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
			);
		
		--get the new ID
		SELECT @InYearGradeID = SCOPE_IDENTITY();
	END

	Print '@InYearGradeID=' + CONVERT(varchar(10), @InYearGradeID);
	

	-- ***********************************************************
	--  Update the InYearGrade table
	-- ***********************************************************
	UPDATE 
		InYearGrade
	SET 
		PersonalTargetGrade = (IIF(@PersonalTargetGrade = '', Null, @PersonalTargetGrade)),
		LearningAimRef = @LearningAimRef,

		Point1_Grade = (IIF(@Point1_Grade = '', Null, @Point1_Grade)),
		Point2_Grade = (IIF(@Point2_Grade = '', Null, @Point2_Grade)),
		Point3_Grade = (IIF(@Point3_Grade = '', Null, @Point3_Grade)),
		Point4_Grade = (IIF(@Point4_Grade = '', Null, @Point4_Grade)),
		Point5_Grade = (IIF(@Point5_Grade = '', Null, @Point5_Grade)),
		Point6_Grade = (IIF(@Point6_Grade = '', Null, @Point6_Grade)),
		Point7_Grade = (IIF(@Point7_Grade = '', Null, @Point7_Grade)),
		Point8_Grade = (IIF(@Point8_Grade = '', Null, @Point8_Grade)),
		Point9_Grade = (IIF(@Point9_Grade = '', Null, @Point9_Grade)),
		Point10_Grade = (IIF(@Point10_Grade = '', Null, @Point10_Grade)),
		Point11_Grade = (IIF(@Point11_Grade = '', Null, @Point11_Grade)),
		Point12_Grade = (IIF(@Point12_Grade = '', Null, @Point12_Grade)),

		Point1_Grade_Updated = (CASE WHEN @Point1_Grade_Existing = @Point1_Grade THEN 0 ELSE 1 END),
		Point2_Grade_Updated = (CASE WHEN @Point2_Grade_Existing = @Point2_Grade THEN 0 ELSE 1 END),
		Point3_Grade_Updated = (CASE WHEN @Point3_Grade_Existing = @Point3_Grade THEN 0 ELSE 1 END),
		Point4_Grade_Updated = (CASE WHEN @Point4_Grade_Existing = @Point4_Grade THEN 0 ELSE 1 END),
		Point5_Grade_Updated = (CASE WHEN @Point5_Grade_Existing = @Point5_Grade THEN 0 ELSE 1 END),
		Point6_Grade_Updated = (CASE WHEN @Point6_Grade_Existing = @Point6_Grade THEN 0 ELSE 1 END),
		Point7_Grade_Updated = (CASE WHEN @Point7_Grade_Existing = @Point7_Grade THEN 0 ELSE 1 END),
		Point8_Grade_Updated = (CASE WHEN @Point8_Grade_Existing = @Point8_Grade THEN 0 ELSE 1 END),
		Point9_Grade_Updated = (CASE WHEN @Point9_Grade_Existing = @Point9_Grade THEN 0 ELSE 1 END),
		Point10_Grade_Updated = (CASE WHEN @Point10_Grade_Existing = @Point10_Grade THEN 0 ELSE 1 END),
		Point11_Grade_Updated = (CASE WHEN @Point11_Grade_Existing = @Point11_Grade THEN 0 ELSE 1 END),
		Point12_Grade_Updated = (CASE WHEN @Point12_Grade_Existing = @Point12_Grade THEN 0 ELSE 1 END),

		Point1_Notes = (IIF(@Point1_Notes = '', Null, @Point1_Notes)),
		Point2_Notes = (IIF(@Point2_Notes = '', Null, @Point2_Notes)),
		Point3_Notes = (IIF(@Point3_Notes = '', Null, @Point3_Notes)),
		Point4_Notes = (IIF(@Point4_Notes = '', Null, @Point4_Notes)),
		Point5_Notes = (IIF(@Point5_Notes = '', Null, @Point5_Notes)),
		Point6_Notes = (IIF(@Point6_Notes = '', Null, @Point6_Notes)),
		Point7_Notes = (IIF(@Point7_Notes = '', Null, @Point7_Notes)),
		Point8_Notes = (IIF(@Point8_Notes = '', Null, @Point8_Notes)),
		Point9_Notes = (IIF(@Point9_Notes = '', Null, @Point9_Notes)),
		Point10_Notes = (IIF(@Point10_Notes = '', Null, @Point10_Notes)),
		Point11_Notes = (IIF(@Point11_Notes = '', Null, @Point11_Notes)),
		Point12_Notes = (IIF(@Point12_Notes = '', Null, @Point12_Notes)),

		Point1_EffortID = (IIF(@Point1_EffortID <= 0, Null, @Point1_EffortID)),
		Point2_EffortID = (IIF(@Point2_EffortID <= 0, Null, @Point2_EffortID)),
		Point3_EffortID = (IIF(@Point3_EffortID <= 0, Null, @Point3_EffortID)),
		Point4_EffortID = (IIF(@Point4_EffortID <= 0, Null, @Point4_EffortID)),
		Point5_EffortID = (IIF(@Point5_EffortID <= 0, Null, @Point5_EffortID)),
		Point6_EffortID = (IIF(@Point6_EffortID <= 0, Null, @Point6_EffortID)),
		Point7_EffortID = (IIF(@Point7_EffortID <= 0, Null, @Point7_EffortID)),
		Point8_EffortID = (IIF(@Point8_EffortID <= 0, Null, @Point8_EffortID)),
		Point9_EffortID = (IIF(@Point9_EffortID <= 0, Null, @Point9_EffortID)),
		Point10_EffortID = (IIF(@Point10_EffortID <= 0, Null, @Point10_EffortID)),
		Point11_EffortID = (IIF(@Point11_EffortID <= 0, Null, @Point11_EffortID)),
		Point12_EffortID = (IIF(@Point12_EffortID <= 0, Null, @Point12_EffortID))
	WHERE
		ID = @InYearGradeID;


	-- ***********************************************************
	--  Populate EnrolmentWebSave
	-- ***********************************************************
	DELETE FROM EnrolmentWebSave WHERE EnrolmentID = @EnrolmentID AND UserName = @UserName;
	INSERT INTO EnrolmentWebSave (EnrolmentID, UserName) VALUES (@EnrolmentID, @UserName);


	-- ***********************************************************
	--  Regenerate the EstactVA data 
	--  We now do this separately to speed up the whole process i.e. when multiple Student changes
	-- ***********************************************************
	--EXEC sp_Student_EstActVA_WebSave_Regenerate @AcademicYearID, @UserName


	-- ***********************************************************
	--  Construct the RowDesc e.g. 22/23,Firstname_450882 450882,21271W
	-- ***********************************************************
	SET @RowDescription = (@AcademicYearID + ',' + @Forenames + ' ' + @Surname + ',' + @CourseCode);


	-- ***********************************************************
	--  Create Audit entries for the changed Grade fields
	-- ***********************************************************
	IF @Point1_Grade != @Point1_Grade_Existing BEGIN
	    IF IsNull(@Point1_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_Grade', null, null, @Point1_Grade_Existing, @Point1_Grade)
	END
	IF @Point2_Grade != @Point2_Grade_Existing BEGIN
	    IF IsNull(@Point2_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_Grade', null, null, @Point2_Grade_Existing, @Point2_Grade)
	END
	IF @Point3_Grade != @Point3_Grade_Existing BEGIN
	    IF IsNull(@Point3_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_Grade', null, null, @Point3_Grade_Existing, @Point3_Grade)
	END
	IF @Point4_Grade != @Point4_Grade_Existing BEGIN
	    IF IsNull(@Point4_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_Grade', null, null, @Point4_Grade_Existing, @Point4_Grade)
	END
	IF @Point5_Grade != @Point5_Grade_Existing BEGIN
	    IF IsNull(@Point5_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_Grade', null, null, @Point5_Grade_Existing, @Point5_Grade)
	END
	IF @Point6_Grade != @Point6_Grade_Existing BEGIN
	    IF IsNull(@Point6_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_Grade', null, null, @Point6_Grade_Existing, @Point6_Grade)
	END
	IF @Point7_Grade != @Point7_Grade_Existing BEGIN
	    IF IsNull(@Point7_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_Grade', null, null, @Point7_Grade_Existing, @Point7_Grade)
	END
	IF @Point8_Grade != @Point8_Grade_Existing BEGIN
	    IF IsNull(@Point8_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_Grade', null, null, @Point8_Grade_Existing, @Point8_Grade)
	END
	IF @Point9_Grade != @Point9_Grade_Existing BEGIN
	    IF IsNull(@Point9_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_Grade', null, null, @Point9_Grade_Existing, @Point9_Grade)
	END
	IF @Point10_Grade != @Point10_Grade_Existing BEGIN
	    IF IsNull(@Point10_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_Grade', null, null, @Point10_Grade_Existing, @Point10_Grade)
	END
	IF @Point11_Grade != @Point11_Grade_Existing BEGIN
	    IF IsNull(@Point11_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_Grade', null, null, @Point11_Grade_Existing, @Point11_Grade)
	END
	IF @Point12_Grade != @Point12_Grade_Existing BEGIN
	    IF IsNull(@Point12_Grade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_Grade', null, null, @Point12_Grade_Existing, @Point12_Grade)
	END


	-- ***********************************************************
	--   Create Audit entries for the changed Notes fields
	-- ***********************************************************
	IF @Point1_Notes != @Point1_Notes_Existing BEGIN
	    IF IsNull(@Point1_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_Notes', null, null, @Point1_Notes_Existing, @Point1_Notes)
	END
	IF @Point2_Notes != @Point2_Notes_Existing BEGIN
	    IF IsNull(@Point2_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_Notes', null, null, @Point2_Notes_Existing, @Point2_Notes)
	END
	IF @Point3_Notes != @Point3_Notes_Existing BEGIN
	    IF IsNull(@Point3_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_Notes', null, null, @Point3_Notes_Existing, @Point3_Notes)
	END
	IF @Point4_Notes != @Point4_Notes_Existing BEGIN
	    IF IsNull(@Point4_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_Notes', null, null, @Point4_Notes_Existing, @Point4_Notes)
	END
	IF @Point5_Notes != @Point5_Notes_Existing BEGIN
	    IF IsNull(@Point5_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_Notes', null, null, @Point5_Notes_Existing, @Point5_Notes)
	END
	IF @Point6_Notes != @Point6_Notes_Existing BEGIN
	    IF IsNull(@Point6_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_Notes', null, null, @Point6_Notes_Existing, @Point6_Notes)
	END
	IF @Point7_Notes != @Point7_Notes_Existing BEGIN
	    IF IsNull(@Point7_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_Notes', null, null, @Point7_Notes_Existing, @Point7_Notes)
	END
	IF @Point8_Notes != @Point8_Notes_Existing BEGIN
	    IF IsNull(@Point8_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_Notes', null, null, @Point8_Notes_Existing, @Point8_Notes)
	END
	IF @Point9_Notes != @Point9_Notes_Existing BEGIN
	    IF IsNull(@Point9_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_Notes', null, null, @Point9_Notes_Existing, @Point9_Notes)
	END
	IF @Point10_Notes != @Point10_Notes_Existing BEGIN
	    IF IsNull(@Point10_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_Notes', null, null, @Point10_Notes_Existing, @Point10_Notes)
	END
	IF @Point11_Notes != @Point11_Notes_Existing BEGIN
	    IF IsNull(@Point11_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_Notes', null, null, @Point11_Notes_Existing, @Point11_Notes)
	END
	IF @Point12_Notes != @Point12_Notes_Existing BEGIN
	    IF IsNull(@Point12_Notes_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_Notes', null, null, @Point12_Notes_Existing, @Point12_Notes)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed EffortGrade fields
	-- ***********************************************************
	IF @Point1_EffortDescription_New != @Point1_EffortDescription_Existing BEGIN
	    IF IsNull(@Point1_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point1_EffortID', null, null, @Point1_EffortDescription_Existing, @Point1_EffortDescription_New)
	END
	--Print '2 New      InYrDesc=' + @Point2_EffortDescription_New;
	--Print '2 Existing InYrDesc=' + @Point2_EffortDescription_Existing;
	IF @Point2_EffortDescription_New != @Point2_EffortDescription_Existing BEGIN
	    IF IsNull(@Point2_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point2_EffortID', null, null, @Point2_EffortDescription_Existing, @Point2_EffortDescription_New)
	END
	IF @Point3_EffortDescription_New != @Point3_EffortDescription_Existing BEGIN
	    IF IsNull(@Point3_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point3_EffortID', null, null, @Point3_EffortDescription_Existing, @Point3_EffortDescription_New)
	END
	IF @Point4_EffortDescription_New != @Point4_EffortDescription_Existing BEGIN
	    IF IsNull(@Point4_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point4_EffortID', null, null, @Point4_EffortDescription_Existing, @Point4_EffortDescription_New)
	END
	IF @Point5_EffortDescription_New != @Point5_EffortDescription_Existing BEGIN
	    IF IsNull(@Point5_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point5_EffortID', null, null, @Point5_EffortDescription_Existing, @Point5_EffortDescription_New)
	END
	IF @Point6_EffortDescription_New != @Point6_EffortDescription_Existing BEGIN
	    IF IsNull(@Point6_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point6_EffortID', null, null, @Point6_EffortDescription_Existing, @Point6_EffortDescription_New)
	END
	IF @Point7_EffortDescription_New != @Point7_EffortDescription_Existing BEGIN
	    IF IsNull(@Point7_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point7_EffortID', null, null, @Point7_EffortDescription_Existing, @Point7_EffortDescription_New)
	END
	IF @Point8_EffortDescription_New != @Point8_EffortDescription_Existing BEGIN
	    IF IsNull(@Point8_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point8_EffortID', null, null, @Point8_EffortDescription_Existing, @Point8_EffortDescription_New)
	END
	IF @Point9_EffortDescription_New != @Point9_EffortDescription_Existing BEGIN
	    IF IsNull(@Point9_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point9_EffortID', null, null, @Point9_EffortDescription_Existing, @Point9_EffortDescription_New)
	END
	IF @Point10_EffortDescription_New != @Point10_EffortDescription_Existing BEGIN
	    IF IsNull(@Point10_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point10_EffortID', null, null, @Point10_EffortDescription_Existing, @Point10_EffortDescription_New)
	END
	IF @Point11_EffortDescription_New != @Point11_EffortDescription_Existing BEGIN
	    IF IsNull(@Point11_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point11_EffortID', null, null, @Point11_EffortDescription_Existing, @Point11_EffortDescription_New)
	END
	IF @Point12_EffortDescription_New != @Point12_EffortDescription_Existing BEGIN
	    IF IsNull(@Point12_EffortDescription_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'Point12_EffortID', null, null, @Point12_EffortDescription_Existing, @Point12_EffortDescription_New)
	END


	-- ***********************************************************
	--  Create Audit entries for the changed PersonalTargetGrade fields
	-- ***********************************************************
	IF @PersonalTargetGrade != @PersonalTargetGrade_Existing BEGIN
	    IF IsNull(@PersonalTargetGrade_Existing, '') = ''  SET @TypeOfChange = 'INSERT'  ELSE  SET @TypeOfChange = 'UPDATE';
		INSERT INTO AuditTrail 
			(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		VALUES
			(GetDate(), @UserName, @TypeOfChange, 'InYearGrade', @InYearGradeID, @RowDescription, 'PersonalTargetGrade', null, null, @PersonalTargetGrade_Existing, @PersonalTargetGrade)
	END	


	-- ***********************************************************
	--   Return 1 for success
	-- ***********************************************************
	SELECT 1;

END
ELSE
BEGIN
    Print 'EstactVA ID Doesnt Exist';

    --ID doesnt exist so return -1
	SELECT -1;
END

GO







SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [sp_WebPlus_TeachingGroupStudents_Update]
@AcademicYearID VARCHAR(5),
@StaffId        INTEGER,
@GroupId        INTEGER,
@StudentIDs     VARCHAR(max)
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 23/3/2023 v1.0.0
-- Modified:    AndyB 19/9/2023 Retrieved CompletionID from OGP_Enrolment (requested by AndyG)
-- Modified:	AndyG 20/01/2024 When checking or populating OGP_Enrolment, use @GroupCourseID instead of @EnrolmentCourseID
-- Descripton:	SP to update the Students assigned to a particular group ID. Students Assigned are passed in as a comma delimited string
-- Example:     exec  sp_WebPlus_TeachingGroupStudents_Update 7, 1047, '9,11,12'
-- =============================================

DECLARE @newID             INT;
DECLARE @GroupCourseID     INT;
DECLARE @EnrolmentCourseID INT;
DECLARE @RecordStatus      VARCHAR(30);
DECLARE @GroupTypeCode     VARCHAR(30);

DECLARE @OGP_EnrolmentID  INT;
DECLARE @OGP_StudentID    INT;
DECLARE @StudentRef       VARCHAR(20); 
DECLARE @OriginalCourseID INT;
DECLARE @CompletionID     INT;

--check if Group Code already exists
IF EXISTS 
	(SELECT 1 FROM OGP_Group WHERE ID = @GroupId) 
BEGIN

	--delete any existing rows for the group
	DELETE FROM OGP_GroupEnrolment  WHERE OGP_GroupID = @GroupId;

	--get the details of the target Group
	SELECT 
		@RecordStatus  = RecordStatus,
		@GroupCourseID = CourseID,
		@GroupTypeCode = OGP_TypeCode
	FROM 
		OGP_Group 
	WHERE 
		ID = @GroupId;

	--SET @RecordStatus = (SELECT RecordStatus FROM OGP_Group WHERE ID = @GroupId); 
	--SET @CourseID = (SELECT CourseID FROM OGP_Group WHERE ID = @GroupId); 
	--SET @GroupType = (SELECT OGP_TypeCode FROM OGP_Group WHERE ID = @GroupId); 

	IF @StudentIDs <> ''
	BEGIN
		--string must end with a ,
		IF @StudentIDs NOT LIKE '%,'
		BEGIN
			SET @StudentIDs = @StudentIDs + ',';
		END

		DECLARE @tokId NVARCHAR(255)
		DECLARE @pos INT

		WHILE DATALENGTH(@StudentIDs) > 0     
		BEGIN
			IF @StudentIDs <> ''
			BEGIN
				--get the Student EnrolmentID
				SELECT @pos  = CHARINDEX(',', @StudentIDs)  
				SELECT @tokId = SUBSTRING(@StudentIDs, 1, @pos-1)

				Print 'Processing StudentID=';
				Print @tokId;

				--get the Student details 
				SELECT
					@OGP_EnrolmentID   = ID,
					@OGP_StudentID     = OGP_StudentID,
					@StudentRef        = StudentRef,
					@OriginalCourseID  = OriginalCourseID,
					@EnrolmentCourseID = CourseID,
					@CompletionID      = OverallCompletionID
				FROM
					OGP_Enrolment
				WHERE
					OGP_Enrolment.ID = @tokId;

				--get the Student details 
				SELECT
					@OGP_EnrolmentID   = ID,
					@OGP_StudentID     = OGP_StudentID,
					@StudentRef        = StudentRef,
					@OriginalCourseID  = OriginalCourseID,
					@EnrolmentCourseID = CourseID,
					@CompletionID      = OverallCompletionID
				FROM
					OGP_Enrolment
				WHERE
					OGP_Enrolment.ID = @tokId;

				--Check if the OGP_Enrolment already exists
				IF EXISTS (SELECT ID FROM OGP_Enrolment WHERE OGP_Enrolment.OGP_StudentID = @OGP_StudentID AND OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/)
				BEGIN
					SELECT @OGP_EnrolmentID = ID FROM OGP_Enrolment WHERE OGP_Enrolment.OGP_StudentID = @OGP_StudentID AND OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/;
				END
				ELSE
				BEGIN
					--Populate OGP_Enrolment record WHERE NOT EXISTS
					INSERT 
						OGP_Enrolment(AcademicYearID, OGP_StudentID, CourseID, OriginalCourseID, StudentRef, OverallCompletionID, RecordStatus)
					SELECT 
						@AcademicYearID, @OGP_StudentID, @GroupCourseID/*@EnrolmentCourseID*/, @OriginalCourseID, @StudentRef, @CompletionID, 'Adhoc' 
					WHERE NOT EXISTS 
						(SELECT ID 
						 FROM   OGP_Enrolment 
						 WHERE  OGP_Enrolment.OGP_StudentID = @OGP_StudentID 
						 AND    OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/);

					SELECT @OGP_EnrolmentID = SCOPE_IDENTITY();
				END

				Print 'Processing OGP_EnrolmentID=';
				Print @OGP_EnrolmentID;
				
				--Populate OGP_EnrolmentStatus record WHERE NOT EXISTS for this enrolment
				INSERT 
					OGP_EnrolmentStatus (OGP_EnrolmentID, OGP_TypeCode, CompletionID, StartDate, RecordStatus)
				SELECT 
					@OGP_EnrolmentID, @GroupTypeCode, 1 AS CompletionID, GetDate() AS StartDate, 'Adhoc' AS RecordStatus
				WHERE NOT EXISTS 
					(SELECT ID 
					 FROM   OGP_EnrolmentStatus 
					 WHERE  OGP_EnrolmentStatus.OGP_EnrolmentID = @OGP_EnrolmentID 
					 AND    OGP_EnrolmentStatus.OGP_TypeCode = @GroupTypeCode AND OGP_EnrolmentStatus.RecordStatus = 'Adhoc');

				--Populate OGP_GroupEnrolment for this enrolment
				INSERT 
					OGP_GroupEnrolment(OGP_GroupID, OGP_EnrolmentID, RecordStatus)
				SELECT 
					@GroupId, @OGP_EnrolmentID, 'Adhoc' AS RecordStatus
				WHERE NOT EXISTS 
					(SELECT ID 
					 FROM   OGP_GroupEnrolment 
					 WHERE  OGP_GroupEnrolment.OGP_GroupID = @GroupId 
					 AND    OGP_GroupEnrolment.OGP_EnrolmentID = @OGP_EnrolmentID);

				--get the rest of the IDs to process
				SELECT @StudentIDs = SUBSTRING(@StudentIDs, @pos+1, LEN(@StudentIDs)-@pos);
			END
			ELSE
			BEGIN
				SET @StudentIDs = '';
			END
		END
	END

		--INSERT INTO AuditTrail 
		--	(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		--VALUES
		--	(1,2,3,4,5,6,7,8,9,0)

	--return 1 for success
	SELECT 1;

END
ELSE
BEGIN
    --GroupID doesnt exist so return -1
	SELECT -1;
END

GO






SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [sp_EstActVA_Grouping_Web]
@AcademicYearID VARCHAR(5),
@Grouping1 VARCHAR(max), 
@Grouping2 VARCHAR(max), 
@Grouping3 VARCHAR(max), 
@Grouping4 VARCHAR(max),
@SavedViewID INTEGER,
@Grouping1Filter VARCHAR(max) = NULL

AS
--line 969

--exec sp_EstActVA_Grouping_web '19/20','CourseCode','CourseTitle','''''','''''',22
--exec sp_EstActVA_Grouping_web '19/20','EnrolmentUserDefinedNumber2','''''','''''','''''',0
--exec sp_EstActVA_Grouping_web '19/20','StudentUserDefinedNumber2','EnrolmentUserDefinedNumber','''''','''''',0
--exec sp_EstActVA_Grouping_web '23/24','TeachingGroupCode','''''','''''','''''',22,'Q41AMG'
--exec sp_EstActVA_Grouping_web '23/24','TeachingGroupCode','''''','''''','''''',22,'AMGTest'

-- =============================================
-- Author:		Andrew Genner
-- Create date: AMG 23/04/2020 v1.22.0
-- Descripton:	SP is the same as sp_EstActVA_Grouping - Speeded up by using CASE statements to only do the calculations that are 
--				necessary and stripped out approx 30% of the fields we are not going to be showing in web
-- Modified:	AMG 16/06/2022 v1.32
-- Description:	Added InYear Points 9 - 12
--				Added in GroupingIYMostRecent_vs_RecentTarget_NationalBanding and GroupingEnrolmentGradeVAScore_vs_MostRecent_NationalBanding
-- Modified:	AMG 20/10/2023 v1.36
-- Description:	Added @AcademicYearID into the @SQL1 dynamic SQL to populate #tStudent
-- Modified:	AMG 23/11/2023
-- Description:	Added UniqueStudentCount so we can calculate the Average QOE score PER STUDENT, not based on average of all Enrolments.
-- Modified:	AMG 04/12/2023
-- Description:	This wasn't working for Manually Created Groups, so now it uses the OriginalCourseID to work out which EstActVA records it needs.
-- Modified:	AMG 09/01/2024 v1.36.0
-- Description: The PARTITION on the UniqueStudentCount wasn't including the "QualificationType" - now corrected
-- Modified:	AMG 23/01/2024 v1.37
-- Description:	When "TeachingGroupCode" is passed through, it always fills #TempIDs table now to better handle Adhoc Groups.
-- =============================================

--DROP TABLE  #TempIDs
--DECLARE @AcademicYearID VARCHAR(5)
--DECLARE @Grouping1 VARCHAR(max)
--DECLARE @Grouping2 VARCHAR(max)
--DECLARE @Grouping3 VARCHAR(max)
--DECLARE @Grouping4 VARCHAR(max)
--DECLARE @SavedViewID INTEGER
--DECLARE @Grouping1Filter VARCHAR(max) = NULL
--SELECT @Grouping1 = 'CourseCode'
--SELECT @Grouping2 = ''''''
--SELECT @Grouping3 = ''''''
--SELECT @Grouping4 = ''''''
--SELECT @AcademicYearID = '19/20'
--SELECT @SavedViewID = 22
--SELECT @Grouping1Filter = 'Q50DCBY2-23/24'

DECLARE @Filter AS VARCHAR(max)

-- First of All, build the Filter String - if one has been passed through
-- ********************************
	SELECT @Filter = ''
	DECLARE @Expression VARCHAR(max)

	DECLARE cur CURSOR FOR
	--Select all the visible Academic Years
	SELECT  
		System_SavedView_Filter.Expression 
	FROM    
		System_SavedView_Filter
	WHERE 
		System_SavedView_Filter.SavedViewID = @SavedViewID

				--Loop through the Academic Years and populate EstActVA
				OPEN cur
				FETCH NEXT FROM cur INTO @Expression

				WHILE @@FETCH_STATUS = 0 
					BEGIN

						SELECT @Filter = @Filter + 	' AND ' + REPLACE(@Expression,'*','%') --REPLACE(@Expression,'''','''''''')
				
					FETCH NEXT FROM cur INTO @Expression

					END

				CLOSE cur
				DEALLOCATE cur

-- ********************************
--Now we have the filter string, carry on...

DECLARE @Grouping1FilterString AS VARCHAR(max)
SELECT @Grouping1FilterString = ''

--If the @GroupingFilter is not NULL and we have a Grouping1, then act normally
IF (@Grouping1 <> 'TeachingGroupCode') AND (@Grouping1Filter IS NOT NULL)
BEGIN
	SELECT @Grouping1FilterString = CASE WHEN @Grouping1Filter IS NULL THEN '' ELSE ' AND ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') = ''' + @Grouping1Filter + '''' END
END

------If the @Grouping1 is 'TeachingGroupCode' and we can get records directly from EstActVA, then act normally
----IF @Grouping1 = 'TeachingGroupCode' AND ( (SELECT COUNT(ID) FROM EstActVA WHERE TeachingGroupCode = @Grouping1Filter AND AcademicYearID = @AcademicYearID) > 0 OR @Grouping1Filter IS NULL)
----BEGIN
----	SELECT @Grouping1FilterString = CASE WHEN @Grouping1Filter IS NULL THEN '' ELSE ' AND ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') = ''' + @Grouping1Filter + '''' END
----END

DECLARE @Grouping1INNERJOINString AS VARCHAR(max)
SELECT @Grouping1INNERJOINString = ''

--If the @Grouping1 is 'TeachingGroupCode' and records aren't retrieved direct from EstActVA, it means we have a manual group
--and we have to go looking for the relevant records...
IF @Grouping1 = 'TeachingGroupCode' /*AND (SELECT COUNT(ID) FROM EstActVA WHERE TeachingGroupCode = @Grouping1Filter AND AcademicYearID = @AcademicYearID) = 0*/ AND @Grouping1Filter IS NOT NULL
BEGIN
	--Load up a #Temp table with IDs that we need for enrolments in a Manual Group.  This uses the OriginalCourseID to get the correct EstActVA.IDs
			SELECT 
			EstActVA.ID
			INTO #TempIDs
			FROM
				(
					SELECT 
					OGP_Enrolment.StudentRef,
					Course.CourseCode,
					OGP_Group.AcademicYearID AS AcademicYearID
					FROM
					OGP_Enrolment
					INNER JOIN OGP_GroupEnrolment
					ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
					INNER JOIN OGP_Group
					ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					INNER JOIN Course
					ON Course.ID = OGP_Enrolment.OriginalCourseID
					WHERE OGP_Enrolment.RecordStatus <> 'Obsolete'
					AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
					AND OGP_Group.RecordStatus <> 'Obsolete'
					AND OGP_Group.OGP_GroupCode = @Grouping1Filter AND OGP_Group.OGP_TypeCode = 'VA' AND OGP_Group.AcademicYearID = @AcademicYearID
				) t
			INNER JOIN EstActVA
			ON EstActVA.StudentRef = t.StudentRef
			AND EstActVA.CourseCode = t.CourseCode
			AND EstActVA.AcademicYearID = t.AcademicYearID
	--Form an "INNER JOIN #Temp ON EstActVA.ID = #Temp.ID" statement for manual groups - we'll use this later when populating #Temp
	SELECT @Grouping1INNERJOINString = ' INNER JOIN #TempIDs ON EstActVA.ID = #TempIDs.ID ' 

END


SELECT @Filter = ISNULL(@Filter,'') + @Grouping1FilterString


--SELECT @Filter
--SELECT @Grouping1INNERJOINString


DECLARE @SQL1 VARCHAR(Max)
DECLARE @SQL2 VARCHAR(Max)


SELECT @SQL1 = ''
SELECT @SQL2 = ''
--SELECT @Filter = 'AND Size = 1.0 AND Cohort = ''A Level'''


--Calculate the AcademicYear from where we are going to pull the National Progress Data
DECLARE @AcademicYearNo INTEGER
SELECT @AcademicYearNo = AcademicYearNo FROM AcademicYear WHERE AcademicYearID = @AcademicYearID

DECLARE @AcademicYearID_NationalProgress VARCHAR(5)
SELECT @AcademicYearID_NationalProgress = (
											SELECT MAX(NationalProgress.AcademicYearID) 
											FROM NationalProgress 
											INNER JOIN AcademicYear 
												ON NationalProgress.AcademicYearID = AcademicYear.AcademicYearID
											WHERE AcademicYear.AcademicYearNo <= @AcademicYearNo
										)

--IF OBJECT_ID('tempdb..#tStudent','U') IS NOT NULL DROP TABLE #tStudent
--IF OBJECT_ID('tempdb..#Temp','U') IS NOT NULL DROP TABLE #Temp
--IF OBJECT_ID('tempdb..#TempFinal','U') IS NOT NULL DROP TABLE #TempFinal

/*
--No longer needed 23/11/2023 because We do UniqueStudentCount using a partition instead
CREATE TABLE #tStudent(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	AcademicYearID [varchar](5) NULL,
	VA_Type [varchar](50) NULL,
	Cohort [varchar](120) NULL,
	CA_QualTypeID [INT] NULL,
	QualificationID [INT] NULL,
	OfqualGradingScheme [varchar](100) NULL,
	Grouping1 [varchar](1000) NULL,
	Grouping2 [varchar](1000) NULL,
	Grouping3 [varchar](1000) NULL,
	Grouping4 [varchar](1000) NULL,
	CountOfStudent [int] NULL
	) 
*/
CREATE TABLE #Temp(
	[ID] [int] IDENTITY(1,1) NOT NULL,
	AcademicYearID [varchar](5) NULL,
	Grouping1 [varchar](1000) NULL,
	Grouping2 [varchar](1000) NULL,
	Grouping3 [varchar](1000) NULL,
	Grouping4 [varchar](1000) NULL,
	CountOfEnrol [int] NULL,
	UniqueStudentCount [int] NULL,
	CtQOEPts_Coll [int] NULL,
	CtQOEPts_GCSE_Coll [int] NULL,
	--CtQOEPts_Fin [int] NULL,
	--CtQOEPts_GCSE_Fin [int] NULL,
	--[EstPoints_AcYrmin3] [decimal](19,14) NULL,
	--[EstPoints_AcYrMin2] [decimal](19,14) NULL,
	--[EstPoints_AcYrMin1] [decimal](19,14) NULL,
	--[VAScore_vs_Orig] [decimal](19,14) NULL,		--
	--[VAScore_vs_Adj] [decimal](19,14) NULL,			--
	--[VAScore_L3VAStu] [decimal](19,14) NULL,		--
	--[EstPoints_L3VAStu] [decimal](19,14) NULL,
	--[ActPoints_L3VAStu] [decimal](19,2) NULL,
	--EnrolmentGradeVAScore_vs_Orig [decimal](19,14) NULL,		--
	--EnrolmentGradeVAScore_vs_Adj [decimal](19,14) NULL,			--
	[QOEPoints_College] [decimal](19,14) NULL,
	[QOEPoints_GCSE_College] [decimal](19,14) NULL,
	--[QOEPoints_Final] [decimal](19,14) NULL,
	--[QOEPoints_GCSE_Final] [decimal](19,14) NULL,
	Size [decimal](19,2) NULL,
	VA_Type [varchar](50) NULL,
	Cohort [varchar](120) NULL,
	IYMostRecentPoints [decimal](19,2) NULL,
	--IYMostRecent_vs_Orig [decimal](19,14) NULL,
	--IYMostRecent_vs_Adj [decimal](19,14) NULL,
	IYMostRecent_vs_RecentTarget [decimal](19,14) NULL,		--
	Point1_Points [decimal](19,2) NULL,
	Point2_Points [decimal](19,2) NULL,
	Point3_Points [decimal](19,2) NULL,
	Point4_Points [decimal](19,2) NULL,
	Point5_Points [decimal](19,2) NULL,
	Point6_Points [decimal](19,2) NULL,
	Point7_Points [decimal](19,2) NULL,
	Point8_Points [decimal](19,2) NULL,
	Point9_Points [decimal](19,2) NULL,
	Point10_Points [decimal](19,2) NULL,
	Point11_Points [decimal](19,2) NULL,
	Point12_Points [decimal](19,2) NULL,
	Point1_vs_MostRecent [decimal](19,14) NULL,
	Point2_vs_MostRecent [decimal](19,14) NULL,
	Point3_vs_MostRecent [decimal](19,14) NULL,
	Point4_vs_MostRecent [decimal](19,14) NULL,
	Point5_vs_MostRecent [decimal](19,14) NULL,
	Point6_vs_MostRecent [decimal](19,14) NULL,
	Point7_vs_MostRecent [decimal](19,14) NULL,
	Point8_vs_MostRecent [decimal](19,14) NULL,
	Point9_vs_MostRecent [decimal](19,14) NULL,
	Point10_vs_MostRecent [decimal](19,14) NULL,
	Point11_vs_MostRecent [decimal](19,14) NULL,
	Point12_vs_MostRecent [decimal](19,14) NULL,
	MostRecentCollegeEstPoints [decimal](19,14) NULL,
	VAScore_vs_MostRecent [decimal](19,14) NULL,			--
	--EnrolmentGradeVAScore_vs_AcYr [decimal](19,14) NULL,	--
	EnrolmentGradeVAScore_vs_MostRecent [decimal](19,14) NULL,		--
	EnrolmentPoints [decimal](19,2) NULL,
	QualificationID [int] NULL,
	CA_QualTypeID [int] NULL,
	OfqualGradingScheme [varchar](255) NULL,
	IYMostRecentGradeNo [int] NULL,
	IYPoint1GradeNo [int] NULL,
	IYPoint2GradeNo [int] NULL,
	IYPoint3GradeNo [int] NULL,
	IYPoint4GradeNo [int] NULL,
	IYPoint5GradeNo [int] NULL,
	IYPoint6GradeNo [int] NULL,
	IYPoint7GradeNo [int] NULL,
	IYPoint8GradeNo [int] NULL,
	IYPoint9GradeNo [int] NULL,
	IYPoint10GradeNo [int] NULL,
	IYPoint11GradeNo [int] NULL,
	IYPoint12GradeNo [int] NULL,
	MostRecentCollegeGradeNo [int] NULL,
	--[EstPoints_AcYr] [decimal](19,14) NULL
	) 
	--failed idea - joining on varchars seems to be quicker than ints!
	--Get the Groupings into tables with ID Numbers - we only need to join on the IDs (INT) rather than the varchars (should be quicker)
	--CREATE TABLE #TempGrouping1(
	--[ID] [int] NOT NULL,
	--Grouping1 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping2(
	--[ID] [int] NOT NULL,
	--Grouping2 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping3(
	--[ID] [int] NOT NULL,
	--Grouping3 [varchar](1000) NULL,
	--)
	--CREATE TABLE #TempGrouping4(
	--[ID] [int] NOT NULL,
	--Grouping4 [varchar](1000) NULL,
	--)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping1)  AS ID, T.Grouping1 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''') AS Grouping1 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping1 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping2)  AS ID, T.Grouping2 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping2 AS VARCHAR(100)) + ','''') AS Grouping2 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping2 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping3)  AS ID, T.Grouping3 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping3 AS VARCHAR(100)) + ','''') AS Grouping3 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping3 exec (@SQL1)
	--SELECT @SQL1 = 
	--'SELECT ROW_NUMBER() OVER (ORDER BY Grouping4)  AS ID, T.Grouping4 FROM (SELECT DISTINCT ISNULL(' + CAST(@Grouping4 AS VARCHAR(100)) + ','''') AS Grouping4 FROM EstActVA WHERE AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + ') T'
	--INSERT INTO #TempGrouping4 exec (@SQL1)


SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	ISNULL( CAST('+@Grouping1+' AS VARCHAR(100)),'''') AS Grouping1,
	ISNULL( CAST('+@Grouping2+' AS VARCHAR(100)),'''') AS Grouping2,
	ISNULL( CAST('+@Grouping3+' AS VARCHAR(100)),'''') AS Grouping3,
	ISNULL( CAST('+@Grouping4+' AS VARCHAR(100)),'''') AS Grouping4,
	--(SELECT ID FROM #TempGrouping1 WHERE Grouping1 = ISNULL(' + CAST(@Grouping1 AS VARCHAR(100)) + ','''')) AS Grouping1Num,
	--(SELECT ID FROM #TempGrouping2 WHERE Grouping2 = ISNULL(' + CAST(@Grouping2 AS VARCHAR(100)) + ','''')) AS Grouping2Num,
	--(SELECT ID FROM #TempGrouping3 WHERE Grouping3 = ISNULL(' + CAST(@Grouping3 AS VARCHAR(100)) + ','''')) AS Grouping3Num,
	--(SELECT ID FROM #TempGrouping4 WHERE Grouping4 = ISNULL(' + CAST(@Grouping4 AS VARCHAR(100)) + ','''')) AS Grouping4Num,
	1 As CountOfEnrol,--Count(ID) As CountOfEnrol,
	CASE ROW_NUMBER() OVER (PARTITION BY AcademicYearID, StudentRef, VA_Type, Cohort, 
	
			CASE VA_Type 
				WHEN ''CA'' THEN (SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = CA_QualTypeID)
				WHEN ''Pass Only'' THEN  ''Pass Only''
				WHEN ''Ofqual Graded'' THEN OfqualGradingScheme
				WHEN ''NoGrade'' THEN ''NoGrade'' 
				WHEN ''L3VA'' THEN (SELECT QualificationLookup.QualificationDescription FROM QualificationLookup WHERE QualificationLookup.ID = QualificationID)
				ELSE NULL
			END,

	ISNULL( CAST('+@Grouping1+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping2+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping3+' AS VARCHAR(100)),''''), ISNULL( CAST('+@Grouping4+' AS VARCHAR(100)),'''') ORDER BY AcademicYearID, StudentRef DESC) WHEN 1 THEN 1 ELSE 0 END AS UniqueStudentCount,
	(CASE WHEN QOEPoints_College IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_Coll,
	(CASE WHEN QOEPoints_GCSE_College IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_GCSE_Coll,
	--(CASE WHEN QOEPoints_Final IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_Fin,
	--(CASE WHEN QOEPoints_GCSE_Final IS NULL THEN 0 ELSE 1 END) AS CtQOEPts_GCSE_Fin,
	--[EstPoints_AcYrmin3],
	--[EstPoints_AcYrMin2],
	--[EstPoints_AcYrMin1],
	--[VAScore_vs_Orig],
	--[VAScore_vs_Adj],
	--[VAScore_L3VAStu],

	--[EstPoints_L3VAStu],
	--[ActPoints_L3VAStu],

	--EnrolmentGradeVAScore_vs_Orig,
	--EnrolmentGradeVAScore_vs_Adj,
	[QOEPoints_College],
	[QOEPoints_GCSE_College],
	--[QOEPoints_Final],
	--[QOEPoints_GCSE_Final],
	(CASE WHEN Cohort IN (''Pass Only'', ''Ofqual Graded'', ''NoGrade'') THEN 1 ELSE Size END) AS Size,
	VA_Type,
	Cohort,
	IYMostRecentPoints,
	--IYMostRecent_vs_Orig,	
	--IYMostRecent_vs_Adj,
	IYMostRecent_vs_RecentTarget,
	Point1_Points,
	Point2_Points,
	Point3_Points,
	Point4_Points,
	Point5_Points,
	Point6_Points,
	Point7_Points,
	Point8_Points,
	Point9_Points,
	Point10_Points,
	Point11_Points,
	Point12_Points,
	Point1_vs_MostRecent,
	Point2_vs_MostRecent,
	Point3_vs_MostRecent,
	Point4_vs_MostRecent,
	Point5_vs_MostRecent,
	Point6_vs_MostRecent,
	Point7_vs_MostRecent,
	Point8_vs_MostRecent,
	Point9_vs_MostRecent,
	Point10_vs_MostRecent,
	Point11_vs_MostRecent,
	Point12_vs_MostRecent,
	MostRecentCollegeEstPoints,
	VAScore_vs_MostRecent,
	--EnrolmentGradeVAScore_vs_AcYr,
	EnrolmentGradeVAScore_vs_MostRecent,
	EnrolmentPoints,
	CASE VA_Type WHEN ''L3VA'' THEN QualificationID ELSE NULL END AS QualificationID,
	CASE VA_Type WHEN ''CA'' THEN CA_QualTypeID ELSE NULL END AS CA_QualTypeID,
	CASE VA_Type WHEN ''Ofqual Graded'' THEN OfqualGradingScheme ELSE '''' END AS OfqualGradingScheme,

	CASE WHEN IYMostRecentPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, IYMostRecentPoints)		
		WHEN VA_Type = ''CA'' THEN 
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, IYMostRecentPoints, Cohort)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(IYMostRecentPoints)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, IYMostRecentPoints)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(IYMostRecentPoints)
		END 
	END
	AS IYMostRecentGradeNo,

	CASE WHEN Point1_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point1_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point1_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point1_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point1_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point1_Points)
		END 
	END
	AS IYPoint1GradeNo,

	CASE WHEN Point2_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point2_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point2_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point2_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point2_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point2_Points)
		END 
	END
	AS IYPoint2GradeNo,

	CASE WHEN Point3_Points  IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point3_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point3_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point3_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point3_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point3_Points)
		END 
	END
	AS IYPoint3GradeNo,

	CASE WHEN Point4_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point4_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point4_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point4_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point4_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point4_Points)
		END 
	END
	AS IYPoint4GradeNo,

	CASE WHEN Point5_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point5_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point5_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point5_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point5_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point5_Points)
		END 
	END
	AS IYPoint5GradeNo,

	CASE WHEN Point6_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point6_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point6_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point6_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point6_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point6_Points)
		END 
	END
	AS IYPoint6GradeNo,

	CASE WHEN Point7_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point7_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point7_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point7_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point7_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point7_Points)
		END 
	END
	AS IYPoint7GradeNo,

	CASE WHEN Point8_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point8_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point8_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point8_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point8_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point8_Points)
		END
	END
	AS IYPoint8GradeNo,

	CASE WHEN Point9_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point9_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point9_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point9_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point9_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point9_Points)
		END
	END
	AS IYPoint9GradeNo,

	CASE WHEN Point10_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point10_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point10_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point10_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point10_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point10_Points)
		END
	END
	AS IYPoint10GradeNo,

	CASE WHEN Point11_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point11_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point11_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point11_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point11_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point11_Points)
		END
	END
	AS IYPoint11GradeNo,

	CASE WHEN Point12_Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, Point12_Points)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(Point12_Points)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, Point12_Points, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, Point12_Points)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(Point12_Points)
		END
	END
	AS IYPoint12GradeNo,
	
	CASE WHEN MostRecentCollegeEstPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = ''L3VA'' THEN 
			dbo.fn_CalculateGradeNo(QualificationID, MostRecentCollegeEstPoints)
		WHEN VA_Type = ''Pass Only'' THEN 
			dbo.fn_CalculateGradeNo_PassOnly(MostRecentCollegeEstPoints)
		WHEN VA_Type = ''CA'' THEN
			dbo.fn_CA_CalculateGradeNo(CA_QualTypeID, MostRecentCollegeEstPoints, Cohort)
		WHEN VA_Type = ''Ofqual Graded'' THEN
			dbo.fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, MostRecentCollegeEstPoints)
		ELSE
			dbo.fn_CalculateGradeNo_NoGrade(MostRecentCollegeEstPoints)
		END 
	END 
	AS MostRecentCollegeGradeNo
	--EstPoints_AcYr

	FROM
	EstActVA ' + @Grouping1INNERJOINString + '
	WHERE AcademicYearID = ''' + @AcademicYearID + '''
	' + @Filter + '

	'
	--print @SQL1
	INSERT INTO #Temp exec (@SQL1)

	--select * from #Temp where Grouping1 = 'R209'
	--*****************************************************

/*
--No longer needed 23/11/2023 because We do UniqueStudentCount using a partition instead

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) < 1 
BEGIN

	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	'''' AS Grouping2Num,
	'''' AS Grouping3Num,
	'''' AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + '
			FROM EstActVA ' + @Grouping1INNERJOINString + '
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + '
	'
END 

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) < 1 
BEGIN
--2
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	'''' AS Grouping3Num,
	'''' AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + '
			FROM EstActVA  ' + @Grouping1INNERJOINString + '
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID,VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + '
	'
END

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) > 0 AND LEN(REPLACE(@Grouping4,'''','')) < 1 
BEGIN
--3
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	COALESCE(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS Grouping3,
	NULL AS Grouping4Num,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + ',
			ISNULL(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS ' + @Grouping3 + '
			FROM EstActVA
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + ' , ' + @Grouping3 + '
	'
END

IF LEN(REPLACE(@Grouping1,'''','')) > 0 AND LEN(REPLACE(@Grouping2,'''','')) > 0 AND LEN(REPLACE(@Grouping3,'''','')) > 0 AND LEN(REPLACE(@Grouping4,'''','')) > 0 
BEGIN
--4
	SELECT @SQL1 = 
	'
	SELECT 
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	COALESCE(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS Grouping1,
	COALESCE(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS Grouping2,
	COALESCE(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS Grouping3,
	COALESCE(CAST(' + @Grouping4 + ' AS VARCHAR(100)),'''') AS Grouping4,
	Count(StudentRef) As CountOfStudent
	FROM
			(
			SELECT DISTINCT
			AcademicYearID,
			VA_Type,
			Cohort,
			CA_QualTypeID,
			QualificationID,
			ISNULL(OfqualGradingScheme,'''') AS OfqualGradingScheme,
			StudentRef,
			ISNULL(CAST(' + @Grouping1 + ' AS VARCHAR(100)),'''') AS ' + @Grouping1 + ',
			ISNULL(CAST(' + @Grouping2 + ' AS VARCHAR(100)),'''') AS ' + @Grouping2 + ',
			ISNULL(CAST(' + @Grouping3 + ' AS VARCHAR(100)),'''') AS ' + @Grouping3 + ',
			ISNULL(CAST(' + @Grouping4 + ' AS VARCHAR(100)),'''') AS ' + @Grouping4 + '
			FROM EstActVA
			WHERE 1=1 AND AcademicYearID = ''' + @AcademicYearID + '''' + @Filter + '
			) t
	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID, QualificationID, OfqualGradingScheme, ' + @Grouping1 + ' , ' + @Grouping2 + ' , ' + @Grouping3 + ' , ' + @Grouping4 + '
	'
END

	--print @SQL1
	INSERT INTO #tStudent exec (@SQL1)

--	Select * FROM #tStudent
--	--********************************************
*/

	--NOTE: Size is taken into account for VA calcs
	--Size is not taken into account for Avg Grade/Points

	SELECT 
	CAST(ROW_NUMBER() OVER (ORDER BY AcademicYearID) AS INT) AS ID,
	AcademicYearID,
	VA_Type,
	Cohort,
	CA_QualTypeID,
	QualificationID,
	OfqualGradingScheme,
	LEFT(ISNULL(Grouping1,''), 100) AS Grouping1,
	LEFT(ISNULL(Grouping2,''), 100) AS Grouping2,
	LEFT(ISNULL(Grouping3,''), 100) AS Grouping3,
	LEFT(ISNULL(Grouping4,''), 100) AS Grouping4,
	--#Temp.Grouping1Num,
	--#Temp.Grouping2Num,
	--#Temp.Grouping3Num,
	--#Temp.Grouping4Num,
	Sum(CountOfEnrol) AS CountOfEnrol,

	--The UniqueStudentCount is a 1 or a 0.  The 1 is placed against the first EstActVA record it comes across for a student, 0 against all others.  Therefore the QOE average can be worked out PER STUDENT
	CASE WHEN Sum(CtQOEPts_Coll*UniqueStudentCount) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_College]*UniqueStudentCount) / Sum(CtQOEPts_Coll*UniqueStudentCount) AS Decimal(19,2)) END AS GroupingQOEPoints_College,
	Sum([QOEPoints_College]*UniqueStudentCount) AS GroupingQOEPoints_College_Dividend,
	Sum(CtQOEPts_Coll*UniqueStudentCount) AS GroupingQOEPoints_College_Divisor,

	CASE WHEN Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_GCSE_College]*UniqueStudentCount) / Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) AS Decimal(19,2)) END AS GroupingQOEPoints_GCSE_College,
	Sum([QOEPoints_GCSE_College]*UniqueStudentCount) AS GroupingQOEPoints_GCSE_College_Dividend,
	Sum(CtQOEPts_GCSE_Coll*UniqueStudentCount) AS GroupingQOEPoints_GCSE_College_Divisor,

	--CASE WHEN Sum(CtQOEPts_Fin) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_Final]) / Sum(CtQOEPts_Fin) AS Decimal(19,2)) END AS GroupingQOEPoints_Final,
	--Sum([QOEPoints_Final]) AS GroupingQOEPoints_Final_Dividend,
	--Sum(CtQOEPts_Fin) AS GroupingQOEPoints_Final_Divisor,

	--CASE WHEN Sum(CtQOEPts_GCSE_Fin) = 0 THEN NULL ELSE CAST(Sum([QOEPoints_GCSE_Final]) / Sum(CtQOEPts_GCSE_Fin) AS Decimal(19,2)) END AS GroupingQOEPoints_GCSE_Final,
	--Sum([QOEPoints_GCSE_Final]) AS GroupingQOEPoints_GCSE_Final_Dividend,
	--Sum(CtQOEPts_GCSE_Fin) AS GroupingQOEPoints_GCSE_Final_Divisor,

	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin3]) / Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin3,
	--CAST(Sum([EstPoints_AcYrmin3]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin3_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin3] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin3_Divisor,
	
	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin2]) / Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin2,
	--CAST(Sum([EstPoints_AcYrmin2]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin2_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin2] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin2_Divisor,
	
	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYrmin1]) / Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYrMin1,
	--CAST(Sum([EstPoints_AcYrmin1]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYrMin1_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYrmin1] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYrMin1_Divisor,

	--CASE WHEN Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_vs_Orig]) / Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingVAScore_vs_Orig,
	--CAST(Sum([VAScore_vs_Orig]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_Orig_Dividend,
	--Sum(CASE WHEN VAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_Orig_Divisor,
	
	--CASE WHEN Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_vs_Adj]) / Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingVAScore_vs_Adj,
	--CAST(Sum([VAScore_vs_Adj]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_Adj_Dividend,
	--Sum(CASE WHEN VAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_Adj_Divisor,
	
	--CASE WHEN Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([VAScore_L3VAStu]) / Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) --HERE! --Need to only /Size when the divisor is not null!
	--	END AS GroupingVAScore_L3VAStu,
	--CAST(Sum([VAScore_L3VAStu]) AS DECIMAL(19,14)) AS GroupingVAScore_L3VAStu_Dividend,
	--Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_L3VAStu_Divisor,
	--Sum(CASE WHEN VAScore_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_L3VAStu_NumEnrols, --Work out the number of enrols that have DfE L3VA

	--CASE WHEN Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_L3VAStu]) / Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEstPoints_L3VAStu,
	--CAST(Sum([EstPoints_L3VAStu]) AS DECIMAL(19,14)) AS GroupingEstPoints_L3VAStu_Dividend,
	--Sum(CASE WHEN EstPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_L3VAStu_Divisor,

	--CASE WHEN Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([ActPoints_L3VAStu]) / Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingActPoints_L3VAStu,
	--CAST(Sum([ActPoints_L3VAStu]) AS DECIMAL(19,14)) AS GroupingActPoints_L3VAStu_Dividend,
	--Sum(CASE WHEN ActPoints_L3VAStu IS NULL THEN 0 ELSE 1 END) AS GroupingActPoints_L3VAStu_Divisor,


	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_Orig]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_Orig,
	--CAST(Sum([EnrolmentGradeVAScore_vs_Orig]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_Orig_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_Orig_Divisor,

	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_Adj]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_Adj,
	--CAST(Sum([EnrolmentGradeVAScore_vs_Adj]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_Adj_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_Adj_Divisor,

	CASE WHEN Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([IYMostRecentPoints]) / Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingIYMostRecentPoints,
	CAST(Sum([IYMostRecentPoints]) AS DECIMAL(19,14)) AS GroupingIYMostRecentPoints_Dividend,
	Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecentPoints_Divisor,


	--CASE WHEN Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([IYMostRecent_vs_Orig]) / Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingIYMostRecent_vs_Orig,
	--CAST(Sum([IYMostRecent_vs_Orig]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_Orig_Dividend,
	--Sum(CASE WHEN IYMostRecent_vs_Orig IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_Orig_Divisor,

	--CASE WHEN Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([IYMostRecent_vs_Adj]) / Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingIYMostRecent_vs_Adj,
	--CAST(Sum([IYMostRecent_vs_Adj]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_Adj_Dividend,
	--Sum(CASE WHEN IYMostRecent_vs_Adj IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_Adj_Divisor,

	CASE WHEN Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([IYMostRecent_vs_RecentTarget]) / Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingIYMostRecent_vs_RecentTarget,
	CAST(Sum([IYMostRecent_vs_RecentTarget]) AS DECIMAL(19,14)) AS GroupingIYMostRecent_vs_RecentTarget_Dividend,
	Sum(CASE WHEN IYMostRecent_vs_RecentTarget IS NULL THEN 0 ELSE 1 END) AS GroupingIYMostRecent_vs_RecentTarget_Divisor,


	CASE WHEN Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point1_Points]) / Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint1Points,
	CAST(Sum([Point1_Points]) AS DECIMAL(19,14)) AS GroupingPoint1Points_Dividend,
	Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint1Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point2_Points]) / Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint2Points,
	CAST(Sum([Point2_Points]) AS DECIMAL(19,14)) AS GroupingPoint2Points_Dividend,
	Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint2Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point3_Points]) / Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint3Points,
	CAST(Sum([Point3_Points]) AS DECIMAL(19,14)) AS GroupingPoint3Points_Dividend,
	Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint3Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point4_Points]) / Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint4Points,
	CAST(Sum([Point4_Points]) AS DECIMAL(19,14)) AS GroupingPoint4Points_Dividend,
	Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint4Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point5_Points]) / Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint5Points,
	CAST(Sum([Point5_Points]) AS DECIMAL(19,14)) AS GroupingPoint5Points_Dividend,
	Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint5Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point6_Points]) / Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint6Points,
	CAST(Sum([Point6_Points]) AS DECIMAL(19,14)) AS GroupingPoint6Points_Dividend,
	Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint6Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point7_Points]) / Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint7Points,
	CAST(Sum([Point7_Points]) AS DECIMAL(19,14)) AS GroupingPoint7Points_Dividend,
	Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint7Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point8_Points]) / Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint8Points,
	CAST(Sum([Point8_Points]) AS DECIMAL(19,14)) AS GroupingPoint8Points_Dividend,
	Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint8Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point9_Points]) / Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint9Points,
	CAST(Sum([Point9_Points]) AS DECIMAL(19,14)) AS GroupingPoint9Points_Dividend,
	Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint9Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point10_Points]) / Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint10Points,
	CAST(Sum([Point10_Points]) AS DECIMAL(19,14)) AS GroupingPoint10Points_Dividend,
	Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint10Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point11_Points]) / Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint11Points,
	CAST(Sum([Point11_Points]) AS DECIMAL(19,14)) AS GroupingPoint11Points_Dividend,
	Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint11Points_Divisor,

	CASE WHEN Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([Point12_Points]) / Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingPoint12Points,
	CAST(Sum([Point12_Points]) AS DECIMAL(19,14)) AS GroupingPoint12Points_Dividend,
	Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingPoint12Points_Divisor,

	CASE WHEN Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point1_vs_MostRecent]) / Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint1_vs_RecentTarget,
	CAST(Sum([Point1_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint1_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point1_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint1_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point2_vs_MostRecent]) / Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint2_vs_RecentTarget,
	CAST(Sum([Point2_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint2_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point2_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint2_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point3_vs_MostRecent]) / Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint3_vs_RecentTarget,
	CAST(Sum([Point3_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint3_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point3_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint3_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point4_vs_MostRecent]) / Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint4_vs_RecentTarget,
	CAST(Sum([Point4_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint4_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point4_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint4_vs_RecentTarget_Divisor,


		CASE WHEN Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point5_vs_MostRecent]) / Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint5_vs_RecentTarget,
	CAST(Sum([Point5_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint5_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point5_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint5_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point6_vs_MostRecent]) / Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint6_vs_RecentTarget,
	CAST(Sum([Point6_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint6_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point6_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint6_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point7_vs_MostRecent]) / Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint7_vs_RecentTarget,
	CAST(Sum([Point7_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint7_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point7_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint7_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point8_vs_MostRecent]) / Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint8_vs_RecentTarget,
	CAST(Sum([Point8_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint8_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point8_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint8_vs_RecentTarget_Divisor,


		CASE WHEN Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point9_vs_MostRecent]) / Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint9_vs_RecentTarget,
	CAST(Sum([Point9_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint9_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point9_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint9_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point10_vs_MostRecent]) / Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint10_vs_RecentTarget,
	CAST(Sum([Point10_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint10_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point10_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint10_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point11_vs_MostRecent]) / Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint11_vs_RecentTarget,
	CAST(Sum([Point11_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint11_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point11_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint11_vs_RecentTarget_Divisor,

		CASE WHEN Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([Point12_vs_MostRecent]) / Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingPoint12_vs_RecentTarget,
	CAST(Sum([Point12_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingPoint12_vs_RecentTarget_Dividend,
	Sum(CASE WHEN Point12_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingPoint12_vs_RecentTarget_Divisor,

	--AMG
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum([MostRecentCollegeEstPoints]) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints,
	CAST(Sum([MostRecentCollegeEstPoints]) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_Divisor,

	CASE WHEN Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([VAScore_vs_MostRecent]) / Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingVAScore_vs_MostRecent,
	CAST(Sum([VAScore_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingVAScore_vs_MostRecent_Dividend,
	Sum(CASE WHEN VAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingVAScore_vs_MostRecent_Divisor,

	--CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
	--	ELSE CAST(Sum([EnrolmentGradeVAScore_vs_AcYr]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	--	END AS GroupingEnrolmentGradeVAScore_vs_AcYr,
	--CAST(Sum([EnrolmentGradeVAScore_vs_AcYr]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_AcYr_Dividend,
	--Sum(CASE WHEN EnrolmentGradeVAScore_vs_AcYr IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_AcYr_Divisor,

	CASE WHEN Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([EnrolmentGradeVAScore_vs_MostRecent]) / Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingEnrolmentGradeVAScore_vs_MostRecent,
	CAST(Sum([EnrolmentGradeVAScore_vs_MostRecent]) AS DECIMAL(19,14)) AS GroupingEnrolmentGradeVAScore_vs_MostRecent_Dividend,
	Sum(CASE WHEN EnrolmentGradeVAScore_vs_MostRecent IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentGradeVAScore_vs_MostRecent_Divisor,

	CASE WHEN Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL 
		ELSE CAST(Sum([EnrolmentPoints]) / Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
		END AS GroupingEnrolmentPoints,
	CAST(Sum([EnrolmentPoints]) AS DECIMAL(19,14)) AS GroupingEnrolmentPoints_Dividend,
	Sum(CASE WHEN EnrolmentPoints IS NULL THEN 0 ELSE 1 END) AS GroupingEnrolmentPoints_Divisor,

	--CASE WHEN Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
	--	ELSE CAST(Sum([EstPoints_AcYr]) / Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2))
	--END AS GroupingEstPoints_AcYr,
	--CAST(Sum([EstPoints_AcYr]) AS DECIMAL(19,14)) AS GroupingEstPoints_AcYr_Dividend,
	--Sum(CASE WHEN [EstPoints_AcYr] IS NULL THEN 0 ELSE 1 END) AS GroupingEstPoints_AcYr_Divisor,

	/*
	CASE WHEN VA_Type = 'CA' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.CA_QualTypeID = #tStudent.CA_QualTypeID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'Pass Only' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.VA_Type = 'Pass Only' AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'L3VA' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.QualificationID = #tStudent.QualificationID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'Ofqual Graded' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.OfqualGradingScheme = #tStudent.OfqualGradingScheme AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	WHEN VA_Type = 'NoGrade' THEN
		COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.Cohort = #tStudent.Cohort AND #Temp.VA_Type = #tStudent.VA_Type AND #Temp.VA_Type = 'NoGrade' AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4),0)
	ELSE
		NULL
	END AS CountOfStudent,
	*/
	SUM(UniqueStudentCount) AS CountOfStudent,

	--NULL AS CountofStudent1 --COALESCE((SELECT #tStudent.CountOfStudent FROM #tStudent WHERE #Temp.AcademicYearID = #tStudent.AcademicYearID AND #Temp.Grouping1 = #tStudent.Grouping1 AND #Temp.Grouping2 = #tStudent.Grouping2 AND #Temp.Grouping3 = #tStudent.Grouping3 AND #Temp.Grouping4 = #tStudent.Grouping4 ),0) AS CountOfStudent1
	
	--STDEVP(MostRecentCollegeEstPoints) AS MostRecentCollegeEstPoints_STDEVP,
	--STDEVP(EnrolmentGradeVAScore_vs_MostRecent) AS EnrolmentGradeVAScore_vs_MostRecent_STDEVP,
	
	--STDEVP(IYMostRecent_vs_RecentTarget) AS IYMostRecent_vs_RecentTarget_STDEVP,
	--STDEVP(Point1_vs_MostRecent) AS Point1_vs_RecentTarget_STDEVP,
	--STDEVP(Point2_vs_MostRecent) AS Point2_vs_RecentTarget_STDEVP,
	--STDEVP(Point3_vs_MostRecent) AS Point3_vs_RecentTarget_STDEVP,
	--STDEVP(Point4_vs_MostRecent) AS Point4_vs_RecentTarget_STDEVP,
	--STDEVP(Point5_vs_MostRecent) AS Point5_vs_RecentTarget_STDEVP,
	--STDEVP(Point6_vs_MostRecent) AS Point6_vs_RecentTarget_STDEVP,
	--STDEVP(Point7_vs_MostRecent) AS Point7_vs_RecentTarget_STDEVP,
	--STDEVP(Point8_vs_MostRecent) AS Point8_vs_RecentTarget_STDEVP,

	--Added 13/06/2019 v1.13 / 1.14 Modified - only count MostRecentCollegeEstPoints when we have IY1, 2, 3, 4, Most Recent points:
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols,
	CAST(Sum(CASE WHEN [Point1_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point1_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt1IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols,
	CAST(Sum(CASE WHEN [Point2_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point2_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt2IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols,
	CAST(Sum(CASE WHEN [Point3_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point3_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt3IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols,
	CAST(Sum(CASE WHEN [Point4_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point4_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt4IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols,
	CAST(Sum(CASE WHEN [Point5_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point5_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt5IYEnrols_Divisor,
	
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols,
	CAST(Sum(CASE WHEN [Point6_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point6_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt6IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols,
	CAST(Sum(CASE WHEN [Point7_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point7_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt7IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols,
	CAST(Sum(CASE WHEN [Point8_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point8_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt8IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols,
	CAST(Sum(CASE WHEN [Point9_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point9_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt9IYEnrols_Divisor,
	
	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols,
	CAST(Sum(CASE WHEN [Point10_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point10_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt10IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols,
	CAST(Sum(CASE WHEN [Point11_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point11_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt11IYEnrols_Divisor,

	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols,
	CAST(Sum(CASE WHEN [Point12_Points] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [Point12_Points] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forPt12IYEnrols_Divisor,


	CASE WHEN Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) = 0 THEN NULL
		ELSE CAST(Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) / Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS DECIMAL(19,2)) 
	END AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols,
	CAST(Sum(CASE WHEN [IYMostRecentPoints] IS NULL THEN 0 ELSE [MostRecentCollegeEstPoints] END) AS DECIMAL(19,14)) AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols_Dividend,
	Sum(CASE WHEN [MostRecentCollegeEstPoints] IS NULL OR [IYMostRecentPoints] IS NULL THEN 0 ELSE 1 END) AS GroupingMostRecentCollegeEstPoints_forMostRecentIYEnrols_Divisor



	INTO
	#TempFinal

	FROM
	#Temp

	GROUP BY AcademicYearID, VA_Type, Cohort, CA_QualTypeID , QualificationID, OfqualGradingScheme, Grouping1 , Grouping2, Grouping3, Grouping4 



	--select * from #TempFinal



----****************************


	SELECT
	ID,
	AcademicYearID,
	VA_Type,
	Cohort,
	CASE VA_Type 
		WHEN 'CA' THEN (SELECT CA_QualType.QualTypeDescription FROM CA_QualType WHERE CA_QualType.ID = CA_QualTypeID)
		WHEN 'Pass Only' THEN  'Pass Only'
		WHEN 'Ofqual Graded' THEN OfqualGradingScheme
		WHEN 'NoGrade' THEN 'NoGrade' 
		WHEN 'L3VA' THEN (SELECT QualificationLookup.QualificationDescription FROM QualificationLookup WHERE QualificationLookup.ID = QualificationID)
		ELSE NULL
	END as QualificationType,

	LEFT(Grouping1, 100) AS Grouping1,
	LEFT(Grouping2, 100) AS Grouping2,
	LEFT(Grouping3, 100) AS Grouping3,
	LEFT(Grouping4, 100) AS Grouping4,
	CountOfEnrol,
	GroupingQOEPoints_College,
	GroupingQOEPoints_College_Dividend,
	GroupingQOEPoints_College_Divisor,
	GroupingQOEPoints_GCSE_College,
	GroupingQOEPoints_GCSE_College_Dividend,
	GroupingQOEPoints_GCSE_College_Divisor,

	--GroupingQOEPoints_Final,
	--GroupingQOEPoints_Final_Dividend,
	--GroupingQOEPoints_Final_Divisor,

	--GroupingQOEPoints_GCSE_Final,
	--GroupingQOEPoints_GCSE_Final_Dividend,
	--GroupingQOEPoints_GCSE_Final_Divisor,

	--GroupingEstPoints_AcYrMin3,
	--GroupingEstPoints_AcYrMin3_Dividend,
	--GroupingEstPoints_AcYrMin3_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin3 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin3, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin3 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin3],

	--GroupingEstPoints_AcYrMin2,
	--GroupingEstPoints_AcYrMin2_Dividend,
	--GroupingEstPoints_AcYrMin2_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin2 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin2, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin2 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin2],
	
	--GroupingEstPoints_AcYrMin1,
	--GroupingEstPoints_AcYrMin1_Dividend,
	--GroupingEstPoints_AcYrMin1_Divisor,

	--CASE WHEN GroupingEstPoints_AcYrMin1 IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYrMin1, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYrMin1 )
	--	END 
	--END
	--AS [GroupingEstGrade_AcYrMin1],

	--GroupingVAScore_vs_Orig,
	--GroupingVAScore_vs_Orig_Dividend,
	--GroupingVAScore_vs_Orig_Divisor,
	
	--GroupingVAScore_vs_Adj,
	--GroupingVAScore_vs_Adj_Dividend,
	--GroupingVAScore_vs_Adj_Divisor,
	
	--GroupingVAScore_L3VAStu,
	--GroupingVAScore_L3VAStu_Dividend,
	--GroupingVAScore_L3VAStu_Divisor,
	
	--GroupingEstPoints_L3VAStu,
	--GroupingEstPoints_L3VAStu_Dividend,
	--GroupingEstPoints_L3VAStu_Divisor,

	--CASE WHEN GroupingEstPoints_L3VAStu IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_L3VAStu, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_L3VAStu )
	--	END
	--END AS [GroupingEstGrade_L3VAStu],

	--GroupingActPoints_L3VAStu,
	--GroupingActPoints_L3VAStu_Dividend,
	--GroupingActPoints_L3VAStu_Divisor,

	--CASE WHEN GroupingActPoints_L3VAStu IS NULL THEN NULL ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingActPoints_L3VAStu, Cohort)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingActPoints_L3VAStu )
	--	END
	--END AS [GroupingActGrade_L3VAStu],
	
	--GroupingEnrolmentGradeVAScore_vs_Orig,
	--GroupingEnrolmentGradeVAScore_vs_Orig_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_Orig_Divisor,

	--GroupingEnrolmentGradeVAScore_vs_Adj,
	--GroupingEnrolmentGradeVAScore_vs_Adj_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_Adj_Divisor,

	GroupingIYMostRecentPoints,
	GroupingIYMostRecentPoints_Dividend,
	GroupingIYMostRecentPoints_Divisor,

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE
		CASE WHEN VA_Type  = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingIYMostRecentPoints, Cohort)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingIYMostRecentPoints)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingIYMostRecentPoints )
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingIYMostRecentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingIYMostRecentPoints)
		ELSE	
			NULL
		END 
	END AS [GroupingIYMostRecentGrade],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingIYMostRecentPoints, Cohort)
		WHEN VA_Type = 'Pass Only' THEN 
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingIYMostRecentPoints)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingIYMostRecentPoints )
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingIYMostRecentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingIYMostRecentPoints)
		ELSE
			NULL
		END  
	END AS [GroupingIYMostRecentGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4  
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END 
	END AS [GroupingIYMostRecentAboveEstGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE 
			NULL
		END 
	END AS [GroupingIYMostRecentBelowEstGradeNo],

	CASE WHEN GroupingIYMostRecentPoints IS NULL THEN NULL ELSE 
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN 
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYMostRecentGradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYMostRecentEqualEstGradeNo],

	GroupingIYMostRecentPoints_Divisor AS CountofIYEnrol, --the divisor is the same as the number of enrols.

	--GroupingIYMostRecent_vs_Orig,
	--GroupingIYMostRecent_vs_Orig_Dividend,
	--GroupingIYMostRecent_vs_Orig_Divisor,
	--GroupingIYMostRecent_vs_Adj,
	--GroupingIYMostRecent_vs_Adj_Dividend,
	--GroupingIYMostRecent_vs_Adj_Divisor,

	GroupingIYMostRecent_vs_RecentTarget,
	GroupingIYMostRecent_vs_RecentTarget_Dividend,
	GroupingIYMostRecent_vs_RecentTarget_Divisor,

	CASE WHEN VA_Type = 'L3VA' THEN
		CASE WHEN GroupingIYMostRecent_vs_RecentTarget = 0 THEN 'Avg' 
		ELSE
			(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE GroupingIYMostRecent_vs_RecentTarget >= NationalProgress.LowerLimit 
							AND GroupingIYMostRecent_vs_RecentTarget < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempFinal.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
			)
		END
	ELSE
		NULL
	END AS GroupingIYMostRecent_vs_RecentTarget_NationalBanding,
	
	GroupingPoint1Points,
	GroupingPoint1Points_Dividend,
	GroupingPoint1Points_Divisor,
	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint1Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint1Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint1Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint1Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint1Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint1Grade],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint1Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint1Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint1Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint1Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint1Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint1GradeNo],
	GroupingPoint1_vs_RecentTarget,
	GroupingPoint1_vs_RecentTarget_Dividend,
	GroupingPoint1_vs_RecentTarget_Divisor,
	GroupingPoint1Points_Divisor AS CountofIYEnrolPoint1, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1AboveEstGradeNo],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1BelowEstGradeNo],

	CASE WHEN GroupingPoint1Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint1GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint1EqualEstGradeNo],


	GroupingPoint2Points,
	GroupingPoint2Points_Dividend,
	GroupingPoint2Points_Divisor,
	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint2Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint2Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint2Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint2Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint2Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint2Grade],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint2Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint2Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint2Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint2Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint2Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint2GradeNo],
	GroupingPoint2_vs_RecentTarget,
	GroupingPoint2_vs_RecentTarget_Dividend,
	GroupingPoint2_vs_RecentTarget_Divisor,
	GroupingPoint2Points_Divisor AS CountofIYEnrolPoint2, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2AboveEstGradeNo],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2BelowEstGradeNo],

	CASE WHEN GroupingPoint2Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint2GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint2EqualEstGradeNo],


	GroupingPoint3Points,
	GroupingPoint3Points_Dividend,
	GroupingPoint3Points_Divisor,
	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint3Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint3Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint3Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint3Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint3Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint3Grade],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint3Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint3Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint3Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint3Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint3Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint3GradeNo],
	GroupingPoint3_vs_RecentTarget,
	GroupingPoint3_vs_RecentTarget_Dividend,
	GroupingPoint3_vs_RecentTarget_Divisor,
	GroupingPoint3Points_Divisor AS CountofIYEnrolPoint3, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3AboveEstGradeNo],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3BelowEstGradeNo],

	CASE WHEN GroupingPoint3Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint3GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint3EqualEstGradeNo],


	GroupingPoint4Points,
	GroupingPoint4Points_Dividend,
	GroupingPoint4Points_Divisor,
	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint4Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint4Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint4Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint4Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint4Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint4Grade],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint4Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint4Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint4Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint4Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint4Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint4GradeNo],
	GroupingPoint4_vs_RecentTarget,
	GroupingPoint4_vs_RecentTarget_Dividend,
	GroupingPoint4_vs_RecentTarget_Divisor,
	GroupingPoint4Points_Divisor AS CountofIYEnrolPoint4, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4AboveEstGradeNo],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4BelowEstGradeNo],

	CASE WHEN GroupingPoint4Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint4GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint4EqualEstGradeNo],


	GroupingPoint5Points,
	GroupingPoint5Points_Dividend,
	GroupingPoint5Points_Divisor,
	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint5Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint5Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint5Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint5Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint5Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint5Grade],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint5Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint5Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint5Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint5Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint5Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint5GradeNo],
	GroupingPoint5_vs_RecentTarget,
	GroupingPoint5_vs_RecentTarget_Dividend,
	GroupingPoint5_vs_RecentTarget_Divisor,
	GroupingPoint5Points_Divisor AS CountofIYEnrolPoint5, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5AboveEstGradeNo],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5BelowEstGradeNo],

	CASE WHEN GroupingPoint5Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint5GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint5EqualEstGradeNo],

	GroupingPoint6Points,
	GroupingPoint6Points_Dividend,
	GroupingPoint6Points_Divisor,
	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint6Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint6Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint6Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint6Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint6Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint6Grade],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint6Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint6Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint6Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint6Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint6Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint6GradeNo],
	GroupingPoint6_vs_RecentTarget,
	GroupingPoint6_vs_RecentTarget_Dividend,
	GroupingPoint6_vs_RecentTarget_Divisor,
	GroupingPoint6Points_Divisor AS CountofIYEnrolPoint6, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6AboveEstGradeNo],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
		ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6BelowEstGradeNo],

	CASE WHEN GroupingPoint6Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint6GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint6EqualEstGradeNo],

	GroupingPoint7Points,
	GroupingPoint7Points_Dividend,
	GroupingPoint7Points_Divisor,
	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint7Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint7Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint7Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint7Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint7Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint7Grade],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint7Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint7Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint7Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint7Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint7Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint7GradeNo],
	GroupingPoint7_vs_RecentTarget,
	GroupingPoint7_vs_RecentTarget_Dividend,
	GroupingPoint7_vs_RecentTarget_Divisor,
	GroupingPoint7Points_Divisor AS CountofIYEnrolPoint7, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7AboveEstGradeNo],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7BelowEstGradeNo],

	CASE WHEN GroupingPoint7Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint7GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint7EqualEstGradeNo],

	GroupingPoint8Points,
	GroupingPoint8Points_Dividend,
	GroupingPoint8Points_Divisor,
	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint8Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint8Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint8Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint8Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint8Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint8Grade],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint8Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint8Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint8Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint8Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint8Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint8GradeNo],
	GroupingPoint8_vs_RecentTarget,
	GroupingPoint8_vs_RecentTarget_Dividend,
	GroupingPoint8_vs_RecentTarget_Divisor,
	GroupingPoint8Points_Divisor AS CountofIYEnrolPoint8, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8AboveEstGradeNo],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8BelowEstGradeNo],

	CASE WHEN GroupingPoint8Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint8GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint8EqualEstGradeNo],


	-----------------------------------------------------------------------------------
	GroupingPoint9Points,
	GroupingPoint9Points_Dividend,
	GroupingPoint9Points_Divisor,
	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint9Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint9Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint9Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint9Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint9Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint9Grade],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint9Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint9Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint9Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint9Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint9Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint9GradeNo],
	GroupingPoint9_vs_RecentTarget,
	GroupingPoint9_vs_RecentTarget_Dividend,
	GroupingPoint9_vs_RecentTarget_Divisor,
	GroupingPoint9Points_Divisor AS CountofIYEnrolPoint9, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9AboveEstGradeNo],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9BelowEstGradeNo],

	CASE WHEN GroupingPoint9Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint9GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint9EqualEstGradeNo],

	---------------------------------------------------------------------------------

	GroupingPoint10Points,
	GroupingPoint10Points_Dividend,
	GroupingPoint10Points_Divisor,
	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint10Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint10Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint10Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint10Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint10Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint10Grade],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint10Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint10Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint10Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint10Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint10Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint10GradeNo],
	GroupingPoint10_vs_RecentTarget,
	GroupingPoint10_vs_RecentTarget_Dividend,
	GroupingPoint10_vs_RecentTarget_Divisor,
	GroupingPoint10Points_Divisor AS CountofIYEnrolPoint10, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10AboveEstGradeNo],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10BelowEstGradeNo],

	CASE WHEN GroupingPoint10Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint10GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint10EqualEstGradeNo],

	---------------------------------------------------------------------------------


	GroupingPoint11Points,
	GroupingPoint11Points_Dividend,
	GroupingPoint11Points_Divisor,
	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint11Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint11Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint11Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint11Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint11Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint11Grade],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint11Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint11Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint11Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint11Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint11Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint11GradeNo],
	GroupingPoint11_vs_RecentTarget,
	GroupingPoint11_vs_RecentTarget_Dividend,
	GroupingPoint11_vs_RecentTarget_Divisor,
	GroupingPoint11Points_Divisor AS CountofIYEnrolPoint11, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11AboveEstGradeNo],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11BelowEstGradeNo],

	CASE WHEN GroupingPoint11Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint11GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint11EqualEstGradeNo],

	---------------------------------------------------------------------------------

	GroupingPoint12Points,
	GroupingPoint12Points_Dividend,
	GroupingPoint12Points_Divisor,
	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingPoint12Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingPoint12Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingPoint12Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingPoint12Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingPoint12Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint12Grade],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGradeNo](CA_QualTypeID, GroupingPoint12Points, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGradeNo](QualificationID, GroupingPoint12Points)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGradeNo_PassOnly(GroupingPoint12Points)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGradeNo_OfqualGraded(OfqualGradingScheme, GroupingPoint12Points) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGradeNo_NoGrade(GroupingPoint12Points)
		ELSE
			NULL
		END
	END AS [GroupingPoint12GradeNo],
	GroupingPoint12_vs_RecentTarget,
	GroupingPoint12_vs_RecentTarget_Dividend,
	GroupingPoint12_vs_RecentTarget_Divisor,
	GroupingPoint12Points_Divisor AS CountofIYEnrolPoint12, --the divisor is the same as the number of enrols.

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the lower the GradeNo, the higher the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo <  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo < #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12AboveEstGradeNo],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo >  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo > #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12BelowEstGradeNo],

	CASE WHEN GroupingPoint12Points IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN -- Remember that the higher the GradeNo, the lower the grade
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.CA_QualTypeID = #TempFinal.CA_QualTypeID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type IN ('Pass Only', 'NoGrade') THEN
			(SELECT Count(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo =  #Temp.MostRecentCollegeGradeNo 
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'L3VA' THEN 
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.QualificationID = #TempFinal.QualificationID
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4
			)
		WHEN VA_Type = 'Ofqual Graded' THEN
			(SELECT COUNT(ID) FROM #Temp WHERE #Temp.IYPoint12GradeNo = #Temp.MostRecentCollegeGradeNo
			AND #Temp.AcademicYearID = #TempFinal.AcademicYearID
			AND #Temp.Cohort = #TempFinal.Cohort
			AND #Temp.OfqualGradingScheme = #TempFinal.OfqualGradingScheme 
			AND #Temp.Grouping1 = #TempFinal.Grouping1 AND #Temp.Grouping2 = #TempFinal.Grouping2 AND #Temp.Grouping3 = #TempFinal.Grouping3 AND #Temp.Grouping4 = #TempFinal.Grouping4 
			)
		ELSE
			NULL
		END
	END AS [GroupingIYPoint12EqualEstGradeNo],

	---------------------------------------------------------------------------------




	GroupingMostRecentCollegeEstPoints,
	GroupingMostRecentCollegeEstPoints_Dividend,
	GroupingMostRecentCollegeEstPoints_Divisor,

	CASE WHEN GroupingMostRecentCollegeEstPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingMostRecentCollegeEstPoints, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingMostRecentCollegeEstPoints)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingMostRecentCollegeEstPoints)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingMostRecentCollegeEstPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingMostRecentCollegeEstPoints)
		ELSE
			NULL
		END
	END AS [GroupingMostRecentCollegeEstGrade],

	GroupingVAScore_vs_MostRecent,
	GroupingVAScore_vs_MostRecent_Dividend,
	GroupingVAScore_vs_MostRecent_Divisor,

	--GroupingEnrolmentGradeVAScore_vs_AcYr,
	--GroupingEnrolmentGradeVAScore_vs_AcYr_Dividend,
	--GroupingEnrolmentGradeVAScore_vs_AcYr_Divisor,

	GroupingEnrolmentGradeVAScore_vs_MostRecent,
	GroupingEnrolmentGradeVAScore_vs_MostRecent_Dividend,
	GroupingEnrolmentGradeVAScore_vs_MostRecent_Divisor,

	CASE WHEN VA_Type = 'L3VA' THEN
		CASE WHEN GroupingEnrolmentGradeVAScore_vs_MostRecent = 0 THEN 'Avg' 
		ELSE
			(SELECT TOP(1) BandDescription FROM NationalProgress 
							WHERE GroupingEnrolmentGradeVAScore_vs_MostRecent >= NationalProgress.LowerLimit 
							AND GroupingEnrolmentGradeVAScore_vs_MostRecent < NationalProgress.UpperLimit
							AND NationalProgress.CohortName = #TempFinal.Cohort 
							AND NationalProgress.AcademicYearID = @AcademicYearID_NationalProgress
			)
		END
	ELSE
		NULL
	END AS GroupingEnrolmentGradeVAScore_vs_MostRecent_NationalBanding,

	GroupingEnrolmentPoints,
	GroupingEnrolmentPoints_Dividend,
	GroupingEnrolmentPoints_Divisor,
	CASE WHEN GroupingEnrolmentPoints IS NULL THEN NULL
	ELSE
		CASE WHEN VA_Type = 'CA' THEN
			[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEnrolmentPoints, Cohort)
		WHEN VA_Type = 'L3VA' THEN
			[dbo].[fn_CalculateGrade](QualificationID, GroupingEnrolmentPoints)
		WHEN VA_Type = 'Pass Only' THEN
			[dbo].fn_CalculateGrade_PassOnly(GroupingEnrolmentPoints)
		WHEN VA_Type = 'Ofqual Graded' THEN
			[dbo].fn_CalculateGrade_OfqualGraded(OfqualGradingScheme, GroupingEnrolmentPoints) 
		WHEN VA_Type = 'NoGrade' THEN
			[dbo].fn_CalculateGrade_NoGrade(GroupingEnrolmentPoints)
		ELSE
			NULL
		END
	END AS [GroupingEnrolmentGrade],

	CountOfStudent,
	CA_QualTypeID,
	QualificationID,

	--GroupingEstPoints_AcYr,
	--GroupingEstPoints_AcYr_Dividend,
	--GroupingEstPoints_AcYr_Divisor,
	--CASE WHEN GroupingEstPoints_AcYr IS NULL THEN NULL
	--ELSE
	--	CASE VA_Type WHEN 'CA' THEN
	--		[dbo].[fn_CA_CalculateGrade](CA_QualTypeID, GroupingEstPoints_AcYr, Cohort)
	--		WHEN 'Pass Only' THEN
	--		[dbo].fn_CalculateGrade_PassOnly(GroupingEstPoints_AcYr)
	--	ELSE
	--		[dbo].[fn_CalculateGrade](QualificationID, GroupingEstPoints_AcYr )
	--	END
	--END AS [GroupingEstGrade_AcYr],

	--CAST (MostRecentCollegeEstPoints_STDEVP AS DECIMAL(19,2)) AS MostRecentPoints_STDEVP,
	--CASE ISNULL(GroupingMostRecentCollegeEstPoints,0) WHEN 0 THEN 0 ELSE
	--CAST( (MostRecentCollegeEstPoints_STDEVP/GroupingMostRecentCollegeEstPoints) * 100 AS DECIMAL(19,2)) 
	--END AS MostRecentPoints_STDEVP_AsPercentage,

	--CAST (EnrolmentGradeVAScore_vs_MostRecent_STDEVP AS DECIMAL(19,2)) AS EnrolmentGradeVA_MostRecent_STDEVP,

	--CAST (IYMostRecent_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IYMostRecentVA_STDEVP,
	--CAST (Point1_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY1VA_STDEVP,
	--CAST (Point2_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY2VA_STDEVP,
	--CAST (Point3_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY3VA_STDEVP,
	--CAST (Point4_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY4VA_STDEVP,
	--CAST (Point5_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY5VA_STDEVP,
	--CAST (Point6_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY6VA_STDEVP,
	--CAST (Point7_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY7VA_STDEVP,
	--CAST (Point8_vs_RecentTarget_STDEVP AS DECIMAL(19,2)) AS IY8VA_STDEVP,

	CASE WHEN GroupingQOEPoints_College_Divisor = 0 THEN NULL ELSE GroupingQOEPoints_College_Divisor END AS CountofEnrolsWithQOE_All
	,CASE WHEN GroupingQOEPoints_GCSE_College_Divisor = 0 THEN NULL ELSE GroupingQOEPoints_GCSE_College_Divisor END AS CountofEnrolsWithQOE_GCSE
	,GroupingEnrolmentPoints_Divisor AS CountofEnrolsWithEnrolmentPoints
--	,GroupingVAScore_L3VAStu_NumEnrols AS CountofEnrolsWithDfEVA



	FROM #TempFinal


GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [sp_WebPlus_Delta_StudentScores_Select] 
  @ID             AS VARCHAR(10), 
  @GroupingType   AS VARCHAR(20), 
  @AcademicYearID AS VARCHAR(5), 
  @NumWeeksTrend  AS INT, 
  @StaffID        AS INT
AS

-- =============================================
-- Author:		Andrew Genner
-- Create date: 17/07/2023
-- Modified:    03/09/2023 AndyB Added GroupingType=Student
-- Modfied:		08/09/2023 AMG Added the full set of Delta Categories and the CompletionID
-- Modified:	14/09/2023 AMG - The Trend was being calculated the wrong way around - corrected.
-- Modified:	14/09/2023 AndyB - Added Latest_Data_Week to the output table
-- Modified:    26/09/2023 AMG - Added mode STUDENTVIEW,so Students see only delta categories that are ContributeToStudentScore = 1
-- Modified:	20/10/2023 AMG - Changed Delta Category PTWorkHours to StudentSurvey
-- Description:	This is to display the OneGrade Plus Delta Scores
-- Pass in the ID and the Grouping Type (Group, Course, LearningAimRef, CollegeStructure)
-- An Overall Student Score is calculated - as is a score for each delta category (and value)
-- It is then joined with Student and StudentFlag information
-- The trend is calculated depending on how many weeks back we want to look - passed as the @NumWeekTrend parameter.
-- Modified:	15/11/2023 AMG - LEFT JOIN to DELTA_CATEGORY for Student and StudentView
-- Modified:	16/11/2023 AMG - When populating #TempStudentCompletion, it now SUMS And GROUPS the CompStatus for the student - otherwise we get multiple recs for the student.
-- Modified:	06/12/2023 AMG - Added in <> 'Obsolete'
-- Modified:	16/01/2024 AMG - In the Course View, there was a hardcoded 2 instead of the @@NumWeeksTrend - fixed
-- Modified:	16/01/2023 AMG Added StudentFlagValue13-18, Changed Delta Category EmployabilitySkills to Skills
-- Modified:	23/01/2024 AMG changed OGP_Enrolment.RecordStatus <> 'Obsolete' to OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc').  Don't Show Adhoc records. (except for the Group view)
------------------------------------------------
-------------------
--Remember, Group, Course and CollegeStructure will be passed @ID as an integer, so this is CAST as an integer when used
--LearningAimRef is passed @ID as a varchar
-------------------
--exec sp_WebPlus_Delta_StudentScores_Select '576', 'Group', '19/20', 5, 2020
--exec sp_WebPlus_Delta_StudentScores_Select '2790', 'Course', '23/24',5, 2020
--exec sp_WebPlus_Delta_StudentScores_Select '50053164', 'LearningAimRef', '19/20', 4, 2020
--exec sp_WebPlus_Delta_StudentScores_Select '3', 'CollegeStructure', '19/20', 6, 2020
--exec sp_WebPlus_Delta_StudentScores_Select '30147759', 'STUDENT', '19/20', 4, 2020


--Group 1469

CREATE TABLE #Temp_DeltaScore_Overall (
	AcademicYearID varchar(5) NOT NULL,
	OGP_StudentID INT NOT NULL,
	DeltaScore_Overall INT NULL,
	DeltaScore_Overall_Trend INT NULL,
	Latest_Data_Week INT NULL,
	Latest_Data_Date DATETIME NULL
					)

CREATE TABLE #Temp_DeltaScore_ByCategory (
	AcademicYearID varchar(5) NOT NULL,
	OGP_StudentID INT NOT NULL,
	DeltaCategoryID INT NULL,
	DisplayName VARCHAR(100) NULL,
	DeltaScore INT NULL,
	DeltaValue DECIMAL(19,2) NULL,
	DeltaScore_Trend INT NULL
					)

CREATE TABLE #TempStudentCompletion (
	AcademicYearID varchar(5) NOT NULL,
	OGP_StudentID INT NOT NULL,
	StudentCompletionID INT NOT NULL
					)

--We have a Group - OGP_Group.ID 
--We need to show a list of students related to that group: @GroupID

--DECLARE @ID INT
--SELECT @ID = 576
--DECLARE @AcademicYearID varchar(5)
--SELECT @AcademicYearID = '19/20'
--DECLARE @GroupingType varchar(20)
--SELECT @GroupingType = 'Group'

----------------------------------------------------------
--Populate a #Temp with the information we need to display
----------------------------------------------------------
IF @GroupingType = 'Group'
BEGIN
	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM
				OGP_Enrolment INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
			WHERE 
				OGP_GroupEnrolment.OGP_GroupID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
				AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete' AND OGP_Enrolment.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID
	) t


	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_Score,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_Score,
			--Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend AS TrendStartWeekNum,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score_Overall
				WHEN 2 THEN Wk2_Score_Overall
				WHEN 3 THEN Wk3_Score_Overall
				WHEN 4 THEN Wk4_Score_Overall
				WHEN 5 THEN Wk5_Score_Overall
				WHEN 6 THEN Wk6_Score_Overall
				WHEN 7 THEN Wk7_Score_Overall
				WHEN 8 THEN Wk8_Score_Overall
				WHEN 9 THEN Wk9_Score_Overall
				WHEN 10 THEN Wk10_Score_Overall
				WHEN 11 THEN Wk11_Score_Overall
				WHEN 12 THEN Wk12_Score_Overall
				WHEN 13 THEN Wk13_Score_Overall
				WHEN 14 THEN Wk14_Score_Overall
				WHEN 15 THEN Wk15_Score_Overall
				WHEN 16 THEN Wk16_Score_Overall
				WHEN 17 THEN Wk17_Score_Overall
				WHEN 18 THEN Wk18_Score_Overall
				WHEN 19 THEN Wk19_Score_Overall
				WHEN 20 THEN Wk20_Score_Overall
				WHEN 21 THEN Wk21_Score_Overall
				WHEN 22 THEN Wk22_Score_Overall
				WHEN 23 THEN Wk23_Score_Overall
				WHEN 24 THEN Wk24_Score_Overall
				WHEN 25 THEN Wk25_Score_Overall
				WHEN 26 THEN Wk26_Score_Overall
				WHEN 27 THEN Wk27_Score_Overall
				WHEN 28 THEN Wk28_Score_Overall
				WHEN 29 THEN Wk29_Score_Overall
				WHEN 30 THEN Wk30_Score_Overall
				WHEN 31 THEN Wk31_Score_Overall
				WHEN 32 THEN Wk32_Score_Overall
				WHEN 33 THEN Wk33_Score_Overall
				WHEN 34 THEN Wk34_Score_Overall
				WHEN 35 THEN Wk35_Score_Overall
				WHEN 36 THEN Wk36_Score_Overall
				WHEN 37 THEN Wk37_Score_Overall
				WHEN 38 THEN Wk38_Score_Overall
				WHEN 39 THEN Wk39_Score_Overall
				WHEN 40 THEN Wk40_Score_Overall
				WHEN 41 THEN Wk41_Score_Overall
				WHEN 42 THEN Wk42_Score_Overall
				WHEN 43 THEN Wk43_Score_Overall
				WHEN 44 THEN Wk44_Score_Overall
				WHEN 45 THEN Wk45_Score_Overall
				WHEN 46 THEN Wk46_Score_Overall
				WHEN 47 THEN Wk47_Score_Overall
				WHEN 48 THEN Wk48_Score_Overall
				WHEN 49 THEN Wk49_Score_Overall
				WHEN 50 THEN Wk50_Score_Overall
				WHEN 51 THEN Wk51_Score_Overall
				WHEN 52 THEN Wk52_Score_Overall
				WHEN 53 THEN Wk53_Score_Overall
			ELSE Wk1_Score_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						LEFT JOIN Delta_Student_Score
						ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID
		WHERE 
			OGP_GroupEnrolment.OGP_GroupID = CAST(@ID AS INT)
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete' AND OGP_Enrolment.RecordStatus <> 'Obsolete' AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	
	SELECT 
	AcademicYearID,
	OGP_StudentID,
	DeltaCategoryID,
	DisplayName,
	Latest_Data_Score,
	Latest_Data_Value,
	Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						LEFT JOIN Delta_Student_Stat
						ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
							LEFT JOIN Delta_Category
							ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID
							AND Delta_Category.IsActive = 1
		WHERE 
			OGP_GroupEnrolment.OGP_GroupID = CAST(@ID AS INT)
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete' AND OGP_Enrolment.RecordStatus <> 'Obsolete' AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

END

IF @GroupingType = 'STUDENT'
BEGIN

	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM 
				OGP_Student INNER JOIN OGP_Enrolment ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			WHERE 
				OGP_Student.StudentRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID
	) t

	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_Score,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_Score,
			--Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend AS TrendStartWeekNum,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score_Overall
				WHEN 2 THEN Wk2_Score_Overall
				WHEN 3 THEN Wk3_Score_Overall
				WHEN 4 THEN Wk4_Score_Overall
				WHEN 5 THEN Wk5_Score_Overall
				WHEN 6 THEN Wk6_Score_Overall
				WHEN 7 THEN Wk7_Score_Overall
				WHEN 8 THEN Wk8_Score_Overall
				WHEN 9 THEN Wk9_Score_Overall
				WHEN 10 THEN Wk10_Score_Overall
				WHEN 11 THEN Wk11_Score_Overall
				WHEN 12 THEN Wk12_Score_Overall
				WHEN 13 THEN Wk13_Score_Overall
				WHEN 14 THEN Wk14_Score_Overall
				WHEN 15 THEN Wk15_Score_Overall
				WHEN 16 THEN Wk16_Score_Overall
				WHEN 17 THEN Wk17_Score_Overall
				WHEN 18 THEN Wk18_Score_Overall
				WHEN 19 THEN Wk19_Score_Overall
				WHEN 20 THEN Wk20_Score_Overall
				WHEN 21 THEN Wk21_Score_Overall
				WHEN 22 THEN Wk22_Score_Overall
				WHEN 23 THEN Wk23_Score_Overall
				WHEN 24 THEN Wk24_Score_Overall
				WHEN 25 THEN Wk25_Score_Overall
				WHEN 26 THEN Wk26_Score_Overall
				WHEN 27 THEN Wk27_Score_Overall
				WHEN 28 THEN Wk28_Score_Overall
				WHEN 29 THEN Wk29_Score_Overall
				WHEN 30 THEN Wk30_Score_Overall
				WHEN 31 THEN Wk31_Score_Overall
				WHEN 32 THEN Wk32_Score_Overall
				WHEN 33 THEN Wk33_Score_Overall
				WHEN 34 THEN Wk34_Score_Overall
				WHEN 35 THEN Wk35_Score_Overall
				WHEN 36 THEN Wk36_Score_Overall
				WHEN 37 THEN Wk37_Score_Overall
				WHEN 38 THEN Wk38_Score_Overall
				WHEN 39 THEN Wk39_Score_Overall
				WHEN 40 THEN Wk40_Score_Overall
				WHEN 41 THEN Wk41_Score_Overall
				WHEN 42 THEN Wk42_Score_Overall
				WHEN 43 THEN Wk43_Score_Overall
				WHEN 44 THEN Wk44_Score_Overall
				WHEN 45 THEN Wk45_Score_Overall
				WHEN 46 THEN Wk46_Score_Overall
				WHEN 47 THEN Wk47_Score_Overall
				WHEN 48 THEN Wk48_Score_Overall
				WHEN 49 THEN Wk49_Score_Overall
				WHEN 50 THEN Wk50_Score_Overall
				WHEN 51 THEN Wk51_Score_Overall
				WHEN 52 THEN Wk52_Score_Overall
				WHEN 53 THEN Wk53_Score_Overall
			ELSE 
				Wk1_Score_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
--					INNER JOIN OGP_GroupEnrolment
--						ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				LEFT JOIN Delta_Student_Score
					ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID
		WHERE 
			OGP_Student.StudentRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	
	SELECT 
	AcademicYearID,
	OGP_StudentID,
	DeltaCategoryID,
	DisplayName,
	Latest_Data_Score,
	Latest_Data_Value,
	Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
--					INNER JOIN OGP_GroupEnrolment
--					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				LEFT JOIN Delta_Student_Stat
					ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
						LEFT JOIN Delta_Category
							ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID AND Delta_Category.IsActive = 1
		WHERE 
			OGP_Student.StudentRef = @ID AND  OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

END

IF @GroupingType = 'STUDENTVIEW'
BEGIN

	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM 
				OGP_Student INNER JOIN OGP_Enrolment ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			WHERE 
				OGP_Student.StudentRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID
			
	) t

	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_StudentScore,
		Latest_Data_StudentScore - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_StudentScore,
			--Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend AS TrendStartWeekNum,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_StudentScore_Overall
				WHEN 2 THEN Wk2_StudentScore_Overall
				WHEN 3 THEN Wk3_StudentScore_Overall
				WHEN 4 THEN Wk4_StudentScore_Overall
				WHEN 5 THEN Wk5_StudentScore_Overall
				WHEN 6 THEN Wk6_StudentScore_Overall
				WHEN 7 THEN Wk7_StudentScore_Overall
				WHEN 8 THEN Wk8_StudentScore_Overall
				WHEN 9 THEN Wk9_StudentScore_Overall
				WHEN 10 THEN Wk10_StudentScore_Overall
				WHEN 11 THEN Wk11_StudentScore_Overall
				WHEN 12 THEN Wk12_StudentScore_Overall
				WHEN 13 THEN Wk13_StudentScore_Overall
				WHEN 14 THEN Wk14_StudentScore_Overall
				WHEN 15 THEN Wk15_StudentScore_Overall
				WHEN 16 THEN Wk16_StudentScore_Overall
				WHEN 17 THEN Wk17_StudentScore_Overall
				WHEN 18 THEN Wk18_StudentScore_Overall
				WHEN 19 THEN Wk19_StudentScore_Overall
				WHEN 20 THEN Wk20_StudentScore_Overall
				WHEN 21 THEN Wk21_StudentScore_Overall
				WHEN 22 THEN Wk22_StudentScore_Overall
				WHEN 23 THEN Wk23_StudentScore_Overall
				WHEN 24 THEN Wk24_StudentScore_Overall
				WHEN 25 THEN Wk25_StudentScore_Overall
				WHEN 26 THEN Wk26_StudentScore_Overall
				WHEN 27 THEN Wk27_StudentScore_Overall
				WHEN 28 THEN Wk28_StudentScore_Overall
				WHEN 29 THEN Wk29_StudentScore_Overall
				WHEN 30 THEN Wk30_StudentScore_Overall
				WHEN 31 THEN Wk31_StudentScore_Overall
				WHEN 32 THEN Wk32_StudentScore_Overall
				WHEN 33 THEN Wk33_StudentScore_Overall
				WHEN 34 THEN Wk34_StudentScore_Overall
				WHEN 35 THEN Wk35_StudentScore_Overall
				WHEN 36 THEN Wk36_StudentScore_Overall
				WHEN 37 THEN Wk37_StudentScore_Overall
				WHEN 38 THEN Wk38_StudentScore_Overall
				WHEN 39 THEN Wk39_StudentScore_Overall
				WHEN 40 THEN Wk40_StudentScore_Overall
				WHEN 41 THEN Wk41_StudentScore_Overall
				WHEN 42 THEN Wk42_StudentScore_Overall
				WHEN 43 THEN Wk43_StudentScore_Overall
				WHEN 44 THEN Wk44_StudentScore_Overall
				WHEN 45 THEN Wk45_StudentScore_Overall
				WHEN 46 THEN Wk46_StudentScore_Overall
				WHEN 47 THEN Wk47_StudentScore_Overall
				WHEN 48 THEN Wk48_StudentScore_Overall
				WHEN 49 THEN Wk49_StudentScore_Overall
				WHEN 50 THEN Wk50_StudentScore_Overall
				WHEN 51 THEN Wk51_StudentScore_Overall
				WHEN 52 THEN Wk52_StudentScore_Overall
				WHEN 53 THEN Wk53_StudentScore_Overall
			ELSE 
				Wk1_StudentScore_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
--					INNER JOIN OGP_GroupEnrolment
--						ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				LEFT JOIN Delta_Student_Score
					ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID
		WHERE 
			OGP_Student.StudentRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	
	SELECT 
	AcademicYearID,
	OGP_StudentID,
	DeltaCategoryID,
	DisplayName,
	Latest_Data_Score,
	Latest_Data_Value,
	Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
--					INNER JOIN OGP_GroupEnrolment
--					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				LEFT JOIN Delta_Student_Stat
					ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
						LEFT JOIN Delta_Category
							ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID AND Delta_Category.IsActive = 1 AND Delta_Category.ContributeToStudentScore = 1
		WHERE 
			OGP_Student.StudentRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

END

IF @GroupingType = 'Course' 
BEGIN

	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM 
				OGP_Student INNER JOIN OGP_Enrolment ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			WHERE 
				OGP_Enrolment.CourseID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID
	) t

	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_Score,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_Score,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score_Overall
				WHEN 2 THEN Wk2_Score_Overall
				WHEN 3 THEN Wk3_Score_Overall
				WHEN 4 THEN Wk4_Score_Overall
				WHEN 5 THEN Wk5_Score_Overall
				WHEN 6 THEN Wk6_Score_Overall
				WHEN 7 THEN Wk7_Score_Overall
				WHEN 8 THEN Wk8_Score_Overall
				WHEN 9 THEN Wk9_Score_Overall
				WHEN 10 THEN Wk10_Score_Overall
				WHEN 11 THEN Wk11_Score_Overall
				WHEN 12 THEN Wk12_Score_Overall
				WHEN 13 THEN Wk13_Score_Overall
				WHEN 14 THEN Wk14_Score_Overall
				WHEN 15 THEN Wk15_Score_Overall
				WHEN 16 THEN Wk16_Score_Overall
				WHEN 17 THEN Wk17_Score_Overall
				WHEN 18 THEN Wk18_Score_Overall
				WHEN 19 THEN Wk19_Score_Overall
				WHEN 20 THEN Wk20_Score_Overall
				WHEN 21 THEN Wk21_Score_Overall
				WHEN 22 THEN Wk22_Score_Overall
				WHEN 23 THEN Wk23_Score_Overall
				WHEN 24 THEN Wk24_Score_Overall
				WHEN 25 THEN Wk25_Score_Overall
				WHEN 26 THEN Wk26_Score_Overall
				WHEN 27 THEN Wk27_Score_Overall
				WHEN 28 THEN Wk28_Score_Overall
				WHEN 29 THEN Wk29_Score_Overall
				WHEN 30 THEN Wk30_Score_Overall
				WHEN 31 THEN Wk31_Score_Overall
				WHEN 32 THEN Wk32_Score_Overall
				WHEN 33 THEN Wk33_Score_Overall
				WHEN 34 THEN Wk34_Score_Overall
				WHEN 35 THEN Wk35_Score_Overall
				WHEN 36 THEN Wk36_Score_Overall
				WHEN 37 THEN Wk37_Score_Overall
				WHEN 38 THEN Wk38_Score_Overall
				WHEN 39 THEN Wk39_Score_Overall
				WHEN 40 THEN Wk40_Score_Overall
				WHEN 41 THEN Wk41_Score_Overall
				WHEN 42 THEN Wk42_Score_Overall
				WHEN 43 THEN Wk43_Score_Overall
				WHEN 44 THEN Wk44_Score_Overall
				WHEN 45 THEN Wk45_Score_Overall
				WHEN 46 THEN Wk46_Score_Overall
				WHEN 47 THEN Wk47_Score_Overall
				WHEN 48 THEN Wk48_Score_Overall
				WHEN 49 THEN Wk49_Score_Overall
				WHEN 50 THEN Wk50_Score_Overall
				WHEN 51 THEN Wk51_Score_Overall
				WHEN 52 THEN Wk52_Score_Overall
				WHEN 53 THEN Wk53_Score_Overall
			ELSE Wk1_Score_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					LEFT JOIN Delta_Student_Score
					ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID
		WHERE 
			OGP_Enrolment.CourseID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t

	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	SELECT 
	AcademicYearID,
	OGP_StudentID,
	DeltaCategoryID,
	DisplayName,
	Latest_Data_Score,
	Latest_Data_Value,
	Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					LEFT JOIN Delta_Student_Stat
					ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
						LEFT JOIN Delta_Category
						ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID
						AND Delta_Category.IsActive = 1
		WHERE 
			OGP_Enrolment.CourseID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete'
		) t


END



IF @GroupingType = 'LearningAim'
BEGIN

	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM 
				OGP_Student
					INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
						INNER JOIN OGP_EnrolmentStatus
						ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
			WHERE OGP_EnrolmentStatus.LearningAimRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID		
	) t


	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_Score,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_Score,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score_Overall
				WHEN 2 THEN Wk2_Score_Overall
				WHEN 3 THEN Wk3_Score_Overall
				WHEN 4 THEN Wk4_Score_Overall
				WHEN 5 THEN Wk5_Score_Overall
				WHEN 6 THEN Wk6_Score_Overall
				WHEN 7 THEN Wk7_Score_Overall
				WHEN 8 THEN Wk8_Score_Overall
				WHEN 9 THEN Wk9_Score_Overall
				WHEN 10 THEN Wk10_Score_Overall
				WHEN 11 THEN Wk11_Score_Overall
				WHEN 12 THEN Wk12_Score_Overall
				WHEN 13 THEN Wk13_Score_Overall
				WHEN 14 THEN Wk14_Score_Overall
				WHEN 15 THEN Wk15_Score_Overall
				WHEN 16 THEN Wk16_Score_Overall
				WHEN 17 THEN Wk17_Score_Overall
				WHEN 18 THEN Wk18_Score_Overall
				WHEN 19 THEN Wk19_Score_Overall
				WHEN 20 THEN Wk20_Score_Overall
				WHEN 21 THEN Wk21_Score_Overall
				WHEN 22 THEN Wk22_Score_Overall
				WHEN 23 THEN Wk23_Score_Overall
				WHEN 24 THEN Wk24_Score_Overall
				WHEN 25 THEN Wk25_Score_Overall
				WHEN 26 THEN Wk26_Score_Overall
				WHEN 27 THEN Wk27_Score_Overall
				WHEN 28 THEN Wk28_Score_Overall
				WHEN 29 THEN Wk29_Score_Overall
				WHEN 30 THEN Wk30_Score_Overall
				WHEN 31 THEN Wk31_Score_Overall
				WHEN 32 THEN Wk32_Score_Overall
				WHEN 33 THEN Wk33_Score_Overall
				WHEN 34 THEN Wk34_Score_Overall
				WHEN 35 THEN Wk35_Score_Overall
				WHEN 36 THEN Wk36_Score_Overall
				WHEN 37 THEN Wk37_Score_Overall
				WHEN 38 THEN Wk38_Score_Overall
				WHEN 39 THEN Wk39_Score_Overall
				WHEN 40 THEN Wk40_Score_Overall
				WHEN 41 THEN Wk41_Score_Overall
				WHEN 42 THEN Wk42_Score_Overall
				WHEN 43 THEN Wk43_Score_Overall
				WHEN 44 THEN Wk44_Score_Overall
				WHEN 45 THEN Wk45_Score_Overall
				WHEN 46 THEN Wk46_Score_Overall
				WHEN 47 THEN Wk47_Score_Overall
				WHEN 48 THEN Wk48_Score_Overall
				WHEN 49 THEN Wk49_Score_Overall
				WHEN 50 THEN Wk50_Score_Overall
				WHEN 51 THEN Wk51_Score_Overall
				WHEN 52 THEN Wk52_Score_Overall
				WHEN 53 THEN Wk53_Score_Overall
			ELSE Wk1_Score_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_EnrolmentStatus
					ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
						LEFT JOIN Delta_Student_Score
						ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID
		WHERE 
			OGP_EnrolmentStatus.LearningAimRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'
		) t
		
	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	SELECT 
	AcademicYearID,
	OGP_StudentID,
	DeltaCategoryID,
	DisplayName,
	Latest_Data_Score,
	Latest_Data_Value,
	Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_EnrolmentStatus
					ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
						LEFT JOIN Delta_Student_Stat
						ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
							LEFT JOIN Delta_Category
							ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID
							AND Delta_Category.IsActive = 1
		WHERE 
			OGP_EnrolmentStatus.LearningAimRef = @ID AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'
		) t
END


IF @GroupingType = 'CollegeStructure'
BEGIN

	--Work out (based on the Enrolments included in the selection), the Completion ID for each Student
	INSERT #TempStudentCompletion (AcademicYearID, OGP_StudentID, StudentCompletionID)
	SELECT 
		t.AcademicYearID,
		t.OGP_StudentID,
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END) AS StudentCompletionID 
	FROM 
	(
		SELECT
			tt.AcademicYearID, tt.OGP_StudentID, SUM(tt.CountCompletionID_1) AS CountCompletionID_1, SUM(tt.CountCompletionID_2) AS CountCompletionID_2,
			SUM(tt.CountCompletionID_3) AS CountCompletionID_3, SUM(tt.CountCompletionID_4) AS CountCompletionID_4, SUM(tt.CountCompletionID_6) AS CountCompletionID_6
		FROM
		(
			SELECT DISTINCT
				OGP_Enrolment.AcademicYearID,
				OGP_Enrolment.OGP_StudentID, 
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 1 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_1,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 2 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_2,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 3 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_3,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 4 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_4,
				(SELECT Count(E.OverallCompletionID) FROM OGP_Enrolment E WHERE E.OverallCompletionID = 6 AND E.ID = OGP_Enrolment.ID) AS CountCompletionID_6
			FROM
				OGP_Student
					INNER JOIN OGP_Enrolment
					ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
						INNER JOIN OGP_GroupEnrolment
						ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
							INNER JOIN OGP_Group
							ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
								INNER JOIN  OGP_CollegeStructureGroup
								ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID					
			WHERE 
				OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
				AND OGP_Group.RecordStatus <> 'Obsolete' AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
		) tt
		GROUP BY
			tt.AcademicYearID, tt.OGP_StudentID				
	) t

	INSERT #Temp_DeltaScore_Overall (AcademicYearID, OGP_StudentID, DeltaScore_Overall, DeltaScore_Overall_Trend, Latest_Data_Date, Latest_Data_Week)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		Latest_Data_Score,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Overall_Trend,
		Latest_Data_Date,
		Latest_Data_Week
		FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Score.Latest_Data_Score,
			CASE (Delta_Student_Score.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score_Overall
				WHEN 2 THEN Wk2_Score_Overall
				WHEN 3 THEN Wk3_Score_Overall
				WHEN 4 THEN Wk4_Score_Overall
				WHEN 5 THEN Wk5_Score_Overall
				WHEN 6 THEN Wk6_Score_Overall
				WHEN 7 THEN Wk7_Score_Overall
				WHEN 8 THEN Wk8_Score_Overall
				WHEN 9 THEN Wk9_Score_Overall
				WHEN 10 THEN Wk10_Score_Overall
				WHEN 11 THEN Wk11_Score_Overall
				WHEN 12 THEN Wk12_Score_Overall
				WHEN 13 THEN Wk13_Score_Overall
				WHEN 14 THEN Wk14_Score_Overall
				WHEN 15 THEN Wk15_Score_Overall
				WHEN 16 THEN Wk16_Score_Overall
				WHEN 17 THEN Wk17_Score_Overall
				WHEN 18 THEN Wk18_Score_Overall
				WHEN 19 THEN Wk19_Score_Overall
				WHEN 20 THEN Wk20_Score_Overall
				WHEN 21 THEN Wk21_Score_Overall
				WHEN 22 THEN Wk22_Score_Overall
				WHEN 23 THEN Wk23_Score_Overall
				WHEN 24 THEN Wk24_Score_Overall
				WHEN 25 THEN Wk25_Score_Overall
				WHEN 26 THEN Wk26_Score_Overall
				WHEN 27 THEN Wk27_Score_Overall
				WHEN 28 THEN Wk28_Score_Overall
				WHEN 29 THEN Wk29_Score_Overall
				WHEN 30 THEN Wk30_Score_Overall
				WHEN 31 THEN Wk31_Score_Overall
				WHEN 32 THEN Wk32_Score_Overall
				WHEN 33 THEN Wk33_Score_Overall
				WHEN 34 THEN Wk34_Score_Overall
				WHEN 35 THEN Wk35_Score_Overall
				WHEN 36 THEN Wk36_Score_Overall
				WHEN 37 THEN Wk37_Score_Overall
				WHEN 38 THEN Wk38_Score_Overall
				WHEN 39 THEN Wk39_Score_Overall
				WHEN 40 THEN Wk40_Score_Overall
				WHEN 41 THEN Wk41_Score_Overall
				WHEN 42 THEN Wk42_Score_Overall
				WHEN 43 THEN Wk43_Score_Overall
				WHEN 44 THEN Wk44_Score_Overall
				WHEN 45 THEN Wk45_Score_Overall
				WHEN 46 THEN Wk46_Score_Overall
				WHEN 47 THEN Wk47_Score_Overall
				WHEN 48 THEN Wk48_Score_Overall
				WHEN 49 THEN Wk49_Score_Overall
				WHEN 50 THEN Wk50_Score_Overall
				WHEN 51 THEN Wk51_Score_Overall
				WHEN 52 THEN Wk52_Score_Overall
				WHEN 53 THEN Wk53_Score_Overall
			ELSE Wk1_Score_Overall END AS TrendStartScore, --If the difference ever drops below 1, just use wk1
			Delta_Student_Score.Latest_Data_Date,
			Delta_Student_Score.Latest_Data_Week
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group
						ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
							INNER JOIN  OGP_CollegeStructureGroup
							ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID
									LEFT JOIN Delta_Student_Score
									ON Delta_Student_Score.OGP_StudentID = OGP_Student.ID

		WHERE 
			OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
			AND OGP_Group.RecordStatus <> 'Obsolete' AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
		) t

	INSERT #Temp_DeltaScore_ByCategory (AcademicYearID, OGP_StudentID, DeltaCategoryID, DisplayName, DeltaScore, DeltaValue, DeltaScore_Trend)
	SELECT 
		AcademicYearID,
		OGP_StudentID,
		DeltaCategoryID,
		DisplayName,
		Latest_Data_Score,
		Latest_Data_Value,
		Latest_Data_Score - TrendStartScore AS DeltaScore_Trend
	FROM
		(
		SELECT DISTINCT
			OGP_Enrolment.AcademicYearID,
			OGP_Student.ID AS OGP_StudentID,
			Delta_Student_Stat.DeltaCategoryID,
			Delta_Category.DisplayName,
			Delta_Student_Stat.Latest_Data_Score,
			Delta_Student_Stat.Latest_Data_Value,
			CASE (Delta_Student_Stat.Latest_Data_Week - @NumWeeksTrend)
				WHEN 1 THEN Wk1_Score
				WHEN 2 THEN Wk2_Score
				WHEN 3 THEN Wk3_Score
				WHEN 4 THEN Wk4_Score
				WHEN 5 THEN Wk5_Score
				WHEN 6 THEN Wk6_Score
				WHEN 7 THEN Wk7_Score
				WHEN 8 THEN Wk8_Score
				WHEN 9 THEN Wk9_Score
				WHEN 10 THEN Wk10_Score
				WHEN 11 THEN Wk11_Score
				WHEN 12 THEN Wk12_Score
				WHEN 13 THEN Wk13_Score
				WHEN 14 THEN Wk14_Score
				WHEN 15 THEN Wk15_Score
				WHEN 16 THEN Wk16_Score
				WHEN 17 THEN Wk17_Score
				WHEN 18 THEN Wk18_Score
				WHEN 19 THEN Wk19_Score
				WHEN 20 THEN Wk20_Score
				WHEN 21 THEN Wk21_Score
				WHEN 22 THEN Wk22_Score
				WHEN 23 THEN Wk23_Score
				WHEN 24 THEN Wk24_Score
				WHEN 25 THEN Wk25_Score
				WHEN 26 THEN Wk26_Score
				WHEN 27 THEN Wk27_Score
				WHEN 28 THEN Wk28_Score
				WHEN 29 THEN Wk29_Score
				WHEN 30 THEN Wk30_Score
				WHEN 31 THEN Wk31_Score
				WHEN 32 THEN Wk32_Score
				WHEN 33 THEN Wk33_Score
				WHEN 34 THEN Wk34_Score
				WHEN 35 THEN Wk35_Score
				WHEN 36 THEN Wk36_Score
				WHEN 37 THEN Wk37_Score
				WHEN 38 THEN Wk38_Score
				WHEN 39 THEN Wk39_Score
				WHEN 40 THEN Wk40_Score
				WHEN 41 THEN Wk41_Score
				WHEN 42 THEN Wk42_Score
				WHEN 43 THEN Wk43_Score
				WHEN 44 THEN Wk44_Score
				WHEN 45 THEN Wk45_Score
				WHEN 46 THEN Wk46_Score
				WHEN 47 THEN Wk47_Score
				WHEN 48 THEN Wk48_Score
				WHEN 49 THEN Wk49_Score
				WHEN 50 THEN Wk50_Score
				WHEN 51 THEN Wk51_Score
				WHEN 52 THEN Wk52_Score
				WHEN 53 THEN Wk53_Score
			ELSE Wk1_Score END AS TrendStartScore --If the difference ever drops below 1, just use wk1
		FROM
			OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
						INNER JOIN OGP_Group
						ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
							INNER JOIN  OGP_CollegeStructureGroup
							ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID
								LEFT JOIN Delta_Student_Stat
								ON Delta_Student_Stat.OGP_StudentID = OGP_Student.ID
									LEFT JOIN Delta_Category
									ON Delta_Student_Stat.DeltaCategoryID = Delta_Category.ID
									AND Delta_Category.IsActive = 1
			WHERE 
			OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT) AND OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc') AND OGP_Student.RecordStatus <> 'Obsolete' AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
			AND OGP_Group.RecordStatus <> 'Obsolete' AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
		) t
END




SELECT 
	OGP_StudentID,
	[Attendance] AS [Attendance_Value], 
	[Punctuality] AS [Punctuality_Value], 
	[Progress] AS [Progress_Value],
	[WorkOutstanding] AS [WorkOutstanding_Value],
	[LateStart] AS [LateStart_Value],
	[ExceptionalEntry] AS [ExceptionalEntry_Value],
	[StudentSurvey] AS [StudentSurvey_Value],
	[WorkPlacement] AS [WorkPlacement_Value],
	[Enrichment] AS [Enrichment_Value], 
	[Comments] AS [Comments_Value],
	[Behavioural] AS [Behavioural_Value],
	[EmployabilitySkills] AS [EmployabilitySkills_Value],
	[User1] AS [User1_Value],
	[User2] AS [User2_Value],
	[User3] AS [User3_Value],
	[User4] AS [User4_Value],
	[User5] AS [User5_Value],
	[User6] AS [User6_Value],
	[User7] AS [User7_Value],
	[User8] AS [User8_Value]

INTO #TempPivot_Value
FROM  
	(
	  SELECT 
		  Delta_Category.SystemName AS DeltaSystemName, 
		  #Temp_DeltaScore_ByCategory.AcademicYearID,
		  #Temp_DeltaScore_ByCategory.[OGP_StudentID], 
		  #Temp_DeltaScore_ByCategory.DeltaValue   
	  FROM 
		#Temp_DeltaScore_ByCategory
		  LEFT JOIN Delta_Category
		  ON Delta_Category.ID = #Temp_DeltaScore_ByCategory.DeltaCategoryID
	) AS SourceTable  
	PIVOT  
	(  
	  MAX(DeltaValue)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR DeltaSystemName IN ([Attendance], [Punctuality], [Progress], [WorkOutstanding], 
								[LateStart], [ExceptionalEntry], [StudentSurvey], [WorkPlacement], 
								[Enrichment], [Comments], [Behavioural], [EmployabilitySkills],
								[User1], [User2], [User3], [User4],
								[User5], [User6], [User7], [User8])  --we need to pull out all 20!
	) AS PivotTable

	
SELECT 
	OGP_StudentID,
	[Attendance] AS [Attendance_Score], 
	[Punctuality] AS [Punctuality_Score], 
	[Progress] AS [Progress_Score] ,
	[WorkOutstanding] AS [WorkOutstanding_Score],
	[LateStart] AS [LateStart_Score],
	[ExceptionalEntry] AS [ExceptionalEntry_Score],
	[StudentSurvey] AS [StudentSurvey_Score],
	[WorkPlacement] AS [WorkPlacement_Score],
	[Enrichment] AS [Enrichment_Score], 
	[Comments] AS [Comments_Score],
	[Behavioural] AS [Behavioural_Score],
	[EmployabilitySkills] AS [EmployabilitySkills_Score],
	[User1] AS [User1_Score],
	[User2] AS [User2_Score],
	[User3] AS [User3_Score],
	[User4] AS [User4_Score],
	[User5] AS [User5_Score],
	[User6] AS [User6_Score],
	[User7] AS [User7_Score],
	[User8] AS [User8_Score]

INTO #TempPivot_Score
FROM  
	(
	  SELECT 
		  Delta_Category.SystemName AS DeltaSystemName, 
		  #Temp_DeltaScore_ByCategory.AcademicYearID,
		  #Temp_DeltaScore_ByCategory.[OGP_StudentID], 
		  #Temp_DeltaScore_ByCategory.DeltaScore
	  FROM 
		#Temp_DeltaScore_ByCategory
		  LEFT JOIN Delta_Category
		  ON Delta_Category.ID = #Temp_DeltaScore_ByCategory.DeltaCategoryID
	) AS SourceTable  
	PIVOT  
	(  
	  MAX(DeltaScore)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR DeltaSystemName IN ([Attendance], [Punctuality], [Progress], [WorkOutstanding], 
								[LateStart], [ExceptionalEntry], [StudentSurvey], [WorkPlacement], 
								[Enrichment], [Comments], [Behavioural], [EmployabilitySkills],
								[User1], [User2], [User3], [User4],
								[User5], [User6], [User7], [User8])  --we need to pull out all 20!
	) AS PivotTable

SELECT 
	OGP_StudentID,
	[Attendance] AS [Attendance_ScoreTrend], 
	[Punctuality] AS [Punctuality_ScoreTrend], 
	[Progress] AS [Progress_ScoreTrend] ,
	[WorkOutstanding] AS [WorkOutstanding_ScoreTrend],
	[LateStart] AS [LateStart_ScoreTrend],
	[ExceptionalEntry] AS [ExceptionalEntry_ScoreTrend],
	[StudentSurvey] AS [StudentSurvey_ScoreTrend],
	[WorkPlacement] AS [WorkPlacement_ScoreTrend],
	[Enrichment] AS [Enrichment_ScoreTrend], 
	[Comments] AS [Comments_ScoreTrend],
	[Behavioural] AS [Behavioural_ScoreTrend],
	[EmployabilitySkills] AS [EmployabilitySkills_ScoreTrend],
	[User1] AS [User1_ScoreTrend],
	[User2] AS [User2_ScoreTrend],
	[User3] AS [User3_ScoreTrend],
	[User4] AS [User4_ScoreTrend],
	[User5] AS [User5_ScoreTrend],
	[User6] AS [User6_ScoreTrend],
	[User7] AS [User7_ScoreTrend],
	[User8] AS [User8_ScoreTrend]

INTO #TempPivot_ScoreTrend
FROM  
	(
	  SELECT 
		  Delta_Category.SystemName AS DeltaSystemName, 
		  #Temp_DeltaScore_ByCategory.AcademicYearID,
		  #Temp_DeltaScore_ByCategory.[OGP_StudentID], 
		  #Temp_DeltaScore_ByCategory.DeltaScore_Trend
	  FROM 
		#Temp_DeltaScore_ByCategory
		  LEFT JOIN Delta_Category
		  ON Delta_Category.ID = #Temp_DeltaScore_ByCategory.DeltaCategoryID
	) AS SourceTable  
	PIVOT  
	(  
	  MAX(DeltaScore_Trend)--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR DeltaSystemName IN ([Attendance], [Punctuality], [Progress], [WorkOutstanding], 
								[LateStart], [ExceptionalEntry], [StudentSurvey], [WorkPlacement], 
								[Enrichment], [Comments], [Behavioural], [EmployabilitySkills],
								[User1], [User2], [User3], [User4],
								[User5], [User6], [User7], [User8])  --we need to pull out all 20!
	) AS PivotTable

SELECT
	OGP_Student.ID,
	OGP_Student.StudentRef,
	OGP_Student.Forenames,
	OGP_Student.Surname,
	OGP_Student.DOB,
	(SELECT StudentCompletionID FROM #TempStudentCompletion WHERE #TempStudentCompletion.OGP_StudentID = OGP_Student.ID) AS CompletionID,
	(SELECT Completion.[Description] FROM #TempStudentCompletion INNER JOIN Completion ON #TempStudentCompletion.StudentCompletionID = Completion.ID WHERE #TempStudentCompletion.OGP_StudentID = OGP_Student.ID) AS CompletionStatus,
	StudentFlagValue1, StudentFlagValue2, StudentFlagValue3, StudentFlagValue4, StudentFlagValue5, StudentFlagValue6, 
	StudentFlagValue7, StudentFlagValue8, StudentFlagValue9, StudentFlagValue10, StudentFlagValue11, StudentFlagValue12,
	StudentFlagValue13, StudentFlagValue14, StudentFlagValue15, StudentFlagValue16, StudentFlagValue17, StudentFlagValue18,
	#Temp_DeltaScore_Overall.DeltaScore_Overall,
	#Temp_DeltaScore_Overall.DeltaScore_Overall_Trend,
	#Temp_DeltaScore_Overall.Latest_Data_Date,
	#Temp_DeltaScore_Overall.Latest_Data_Week,
	#TempPivot_Value.[Attendance_Value], [Punctuality_Value], [Progress_Value], #TempPivot_Value.[WorkOutstanding_Value],
	#TempPivot_Value.[LateStart_Value], #TempPivot_Value.[ExceptionalEntry_Value], #TempPivot_Value.[StudentSurvey_Value], #TempPivot_Value.[WorkPlacement_Value],
	#TempPivot_Value.[Enrichment_Value], #TempPivot_Value.[Comments_Value], #TempPivot_Value.[Behavioural_Value], #TempPivot_Value.[EmployabilitySkills_Value],
	#TempPivot_Value.[User1_Value], #TempPivot_Value.[User2_Value], #TempPivot_Value.[User3_Value], #TempPivot_Value.[User4_Value],
	#TempPivot_Value.[User5_Value], #TempPivot_Value.[User6_Value], #TempPivot_Value.[User7_Value], #TempPivot_Value.[User8_Value],

	#TempPivot_Score.[Attendance_Score], #TempPivot_Score.[Punctuality_Score], #TempPivot_Score.[Progress_Score], #TempPivot_Score.[WorkOutstanding_Score], --we need to pull out all 20!
	#TempPivot_Score.[LateStart_Score], #TempPivot_Score.[ExceptionalEntry_Score], #TempPivot_Score.[StudentSurvey_Score], #TempPivot_Score.[WorkPlacement_Score],
	#TempPivot_Score.[Enrichment_Score], #TempPivot_Score.[Comments_Score], #TempPivot_Score.[Behavioural_Score], #TempPivot_Score.[EmployabilitySkills_Score],
	#TempPivot_Score.[User1_Score], #TempPivot_Score.[User2_Score], #TempPivot_Score.[User3_Score], #TempPivot_Score.[User4_Score],
	#TempPivot_Score.[User5_Score], #TempPivot_Score.[User6_Score], #TempPivot_Score.[User7_Score], #TempPivot_Score.[User8_Score],

	#TempPivot_ScoreTrend.[Attendance_ScoreTrend], #TempPivot_ScoreTrend.[Punctuality_ScoreTrend], #TempPivot_ScoreTrend.[Progress_ScoreTrend], #TempPivot_ScoreTrend.[WorkOutstanding_ScoreTrend],
	#TempPivot_ScoreTrend.[LateStart_ScoreTrend], #TempPivot_ScoreTrend.[ExceptionalEntry_ScoreTrend], #TempPivot_ScoreTrend.[StudentSurvey_ScoreTrend], #TempPivot_ScoreTrend.[WorkPlacement_ScoreTrend],
	#TempPivot_ScoreTrend.[Enrichment_ScoreTrend], #TempPivot_ScoreTrend.[Comments_ScoreTrend], #TempPivot_ScoreTrend.[Behavioural_ScoreTrend], #TempPivot_ScoreTrend.[EmployabilitySkills_ScoreTrend],
	#TempPivot_ScoreTrend.[User1_ScoreTrend], #TempPivot_ScoreTrend.[User2_ScoreTrend], #TempPivot_ScoreTrend.[User3_ScoreTrend], #TempPivot_ScoreTrend.[User4_ScoreTrend],
	#TempPivot_ScoreTrend.[User5_ScoreTrend], #TempPivot_ScoreTrend.[User6_ScoreTrend], #TempPivot_ScoreTrend.[User7_ScoreTrend], #TempPivot_ScoreTrend.[User8_ScoreTrend],

	CASE WHEN Delta_Watchlist.OGP_StudentID = OGP_Student.ID THEN 1 ELSE 0 END AS IsInWatchlist

FROM
	#Temp_DeltaScore_Overall
	INNER JOIN OGP_Student
	ON #Temp_DeltaScore_Overall.OGP_StudentID = OGP_Student.ID
		INNER JOIN #TempPivot_Value
		ON #Temp_DeltaScore_Overall.OGP_StudentID = #TempPivot_Value.OGP_StudentID
			INNER JOIN #TempPivot_Score
			ON #Temp_DeltaScore_Overall.OGP_StudentID = #TempPivot_Score.OGP_StudentID 
				INNER JOIN #TempPivot_ScoreTrend
				ON #Temp_DeltaScore_Overall.OGP_StudentID = #TempPivot_ScoreTrend.OGP_StudentID  
					LEFT JOIN Delta_Student_InformationFlag
					ON Delta_Student_InformationFlag.OGP_StudentID = #Temp_DeltaScore_Overall.OGP_StudentID
						LEFT JOIN Delta_Watchlist
						ON OGP_Student.ID = Delta_Watchlist.OGP_StudentID
						AND Delta_Watchlist.StaffID = @StaffID
ORDER BY 4,3,2 -- Surname,Forename,StudentRef


GO


SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [sp_WebPlus_Delta_EnrolmentInfo_Select] 
  @ID             AS VARCHAR(10), 
  @GroupingType   AS VARCHAR(20), 
  @ShowAllCourses AS BIT, 
  @AcademicYearID AS VARCHAR(5), 
  @StaffID        AS INT
AS
-- =============================================
-- Author:		Andrew Genner
-- Create date: 17/07/2023
-- Modified:    03/09/2023 AndyB Added GroupingType=Student
-- Modified:	08/09/2023 AMG Added CompletionID, Add in all 20 Delta Categories
-- Modified:	09/10/2023 AMG Corrected SQL to return "All" Courses data and added RecordStatus <> 'Obsolete'.  
--						   Added 'STUDENTVIEW' to limit Categories WHERE ContributeToStudentScore = 1 and ensured that we don't show Active Delta Categories
-- Modified:	15/12/2023 AMG When populating #Temp, it now uses "Delta_Category.ID AS DeltaCategoryID".  Also simplified the Delta_Category.IsActive =1 bit to work on LEFT JOIN
-- Modified:	16/01/2023 AMG Added StudentFlagValue13-18, Changeed Delta Category EmployabilitySkills to Skills
-- Modified:	23/01/2024 AMG reworked Course, LAim, CollegeStructure (View All Courses) to work correctly
-- Description:	This is to display the OneGrade Plus Delta Enrolment details
-- Pass in the ID and the Grouping Type (Group, Course, LearningAimRef, CollegeStructure)
-- The Enrolment Course Values produced can be restricted to those concerned with the GroupingType passed through (@ShowAllCourses = 0)
-- Alternatively, If we want top show ALL Course Enrolment values related to the GroupingType passed through, we can @ShowAllCourses = 1.
-- It is then joined with Student and StudentFlag information
------------------------------------------------
-------------------
--Remember, Group, Course and CollegeStructure will be passed @ID as an integer, so this is CAST as an integer when used
--LearningAimRef is passed @ID as a varchar
-------------------
--exec sp_WebPlus_Delta_EnrolmentInfo_Select '1469', 'Group', 1, '19/20', 2020
--exec sp_WebPlus_Delta_EnrolmentInfo_Select '1716', 'Course', 1, '19/20', 2020
--exec sp_WebPlus_Delta_EnrolmentInfo_Select '50053164', 'LearningAimRef', 1, '19/20', 2020
--exec sp_WebPlus_Delta_EnrolmentInfo_Select '3', 'CollegeStructure', 1, '19/20', 2020
--exec sp_WebPlus_Delta_EnrolmentInfo_Select '30147759', 'STUDENT', 1, '19/20', 2020

--e.g.
--ID '576' 'Group' = 'A016L001', '19/20'
--ID '1716' 'Course' = 'A016', '19/20'
--ID '50053164' 'LearningAimRef' = '50053164', '19/20'
--ID '3' 'CollegeStructure' = 'Arts School', '19/20'

--@ShowAllCourses = 1 --We want to show all Enrolment Delta Values for Students in this group / course / LearningAim / CollegeStructure
--@ShowAllCourses = 0 --We only want to show Enrolment Delta Values for Enrolments in this Group / course / LearningAim / CollegeStructure

--#Temp holds our basic information which we need to pivot.
CREATE TABLE #Temp (
	AcademicYearID varchar(5) NOT NULL,
	OGP_EnrolmentID INT NOT NULL,
	OGP_StudentID INT NOT NULL,
	CourseID INT NULL,
	CourseCode VARCHAR(50) NULL,
	CompletionID INT NULL,
	DeltaCategoryID INT NULL,
	DisplayName VARCHAR(100) NULL,
	[Value] DECIMAL(19,2) NULL,
	[Information] VARCHAR(1500) NULL,
	[Imported_Date] DATETIME NULL
					)
--We have a Group - OGP_Group.ID 
--We need to show a list of enrols ( from Delta_Enrolment_Information ) related to that group: @GroupID

--Imagine a Group on Course C
--It contains enrols from Courses A and B
--we need to show the Original Courses for the enrolments - not course C
--becasue we are importing Enrolment Info for Courses A and B for the students - not course C

--In the delta page, we need the enrolment information from the students Original Courses..
--This will display data for each *enrolment* within the group

----------------------------------------------------------
--Populate a #Temp with the information we need to display
----------------------------------------------------------
IF @ShowAllCourses = 1 AND @GroupingType = 'Group'
BEGIN

	SELECT 
		OGP_Student.ID
	INTO 
		#TempStudents
	FROM
		OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				AND OGP_Enrolment.RecordStatus <> 'Obsolete'
				AND OGP_Student.RecordStatus <> 'Obsolete'
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
	WHERE
			OGP_GroupEnrolment.OGP_GroupID = CAST(@ID AS INT)
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID

	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		Course.ID,
		Course.CourseCode AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		DC.ID AS DeltaCategoryID,
		DC.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
			AND OGP_Student.RecordStatus <> 'Obsolete'
				INNER JOIN #TempStudents
				ON #TempStudents.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN Course 
					ON OGP_Enrolment.OriginalCourseID = Course.ID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
						AND Delta_Enrolment_Information.CourseID = Course.ID
								LEFT JOIN (SELECT Delta_Category.ID, Delta_Category.DisplayName FROM Delta_Category WHERE Delta_Category.IsActive = 1) DC
								ON Delta_Enrolment_Information.DeltaCategoryID = DC.ID	

		
END
--
IF @ShowAllCourses = 0 AND @GroupingType = 'Group'
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN OGP_GroupEnrolment
				ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN Course EnrolmentCourse 
					ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.CourseID = OGP_Enrolment.OriginalCourseID --Important
						AND Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
							LEFT JOIN Course
							ON Delta_Enrolment_Information.CourseID = Course.ID
								LEFT JOIN Delta_Category
								ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID	
								AND Delta_Category.IsActive = 1
												
	WHERE 
		OGP_GroupEnrolment.OGP_GroupID = CAST(@ID AS INT)
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus <> 'Obsolete'
		AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'

END

--STUDENT
--At the student view, we show all courses, so there is no need to have "ShowAllCourses" option...
IF @GroupingType = 'STUDENT'
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN Course EnrolmentCourse 
				ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
					LEFT JOIN Delta_Enrolment_Information
					ON Delta_Enrolment_Information.CourseID = OGP_Enrolment.OriginalCourseID --Important
					AND Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
						LEFT JOIN Course
						ON Delta_Enrolment_Information.CourseID = Course.ID
							LEFT JOIN Delta_Category
							ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
							AND Delta_Category.IsActive = 1
	WHERE 
		OGP_Student.StudentRef = @ID 
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')

END

--STUDENT
--At the student view, we show all courses, so there is no need to have "ShowAllCourses" option...
IF @GroupingType = 'STUDENTVIEW'
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN Course EnrolmentCourse 
					ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
					LEFT JOIN Delta_Enrolment_Information
					ON Delta_Enrolment_Information.CourseID = OGP_Enrolment.OriginalCourseID --Important
					AND Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
						LEFT JOIN Course
						ON Delta_Enrolment_Information.CourseID = Course.ID
							LEFT JOIN Delta_Category
							ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
							AND Delta_Category.IsActive = 1
							AND Delta_Category.ContributeToStudentScore = 1
	WHERE 
		OGP_Student.StudentRef = @ID 
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')

END


--COURSE
IF @ShowAllCourses = 1 AND @GroupingType = 'Course'
BEGIN

	SELECT DISTINCT
		OGP_Student.ID
	INTO 
		#TempStudentsCourse
	FROM
		OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
				AND OGP_Student.RecordStatus <> 'Obsolete'
					INNER JOIN Course
					ON OGP_Enrolment.CourseID = Course.ID
	WHERE
			OGP_Enrolment.CourseID = CAST(@ID AS INT)
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID

	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		Course.ID,
		Course.CourseCode AS CourseCode,
		--COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		--COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		DC.ID AS DeltaCategoryID,
		DC.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN #TempStudentsCourse
				ON #TempStudentsCourse.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN Course 
					ON OGP_Enrolment.OriginalCourseID = Course.ID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
						AND Delta_Enrolment_Information.CourseID = Course.ID
								LEFT JOIN (SELECT Delta_Category.ID, Delta_Category.DisplayName FROM Delta_Category WHERE Delta_Category.IsActive = 1) DC
								ON Delta_Enrolment_Information.DeltaCategoryID = DC.ID	
							
	WHERE 
		OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')

	--INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	--SELECT DISTINCT
	--	OGP_Enrolment.AcademicYearID,
	--	OGP_Enrolment.ID AS OGP_EnrolmentID,
	--	OGP_Student.ID AS OGP_StudentID,
	--	COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
	--	COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
	--	OGP_Enrolment.OverallCompletionID,
	--	--Delta_Enrolment_Information.DeltaCategoryID,
	--	Delta_Category.ID AS DeltaCategoryID,
	--	Delta_Category.DisplayName,
	--	Delta_Enrolment_Information.[Value],
	--	Delta_Enrolment_Information.[Information],
	--	Delta_Enrolment_Information.Imported_Date
	--FROM
	--	OGP_Student
	--		INNER JOIN OGP_Enrolment
	--		ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
	--			INNER JOIN Course EnrolmentCourse 
	--			ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
	--				LEFT JOIN Delta_Enrolment_Information
	--				ON Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
	--					LEFT JOIN Course
	--					ON Delta_Enrolment_Information.CourseID = Course.ID
	--						LEFT JOIN Delta_Category
	--						ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
	--						AND Delta_Category.IsActive = 1
							
	--WHERE 
	--	OGP_Enrolment.CourseID = CAST(@ID AS INT)
	--	AND OGP_Enrolment.AcademicYearID = @AcademicYearID
	--	AND OGP_Student.RecordStatus <> 'Obsolete'
	--	AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
END
--
IF @ShowAllCourses = 0 AND @GroupingType = 'Course'
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN Course EnrolmentCourse 
				ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
					LEFT JOIN Delta_Enrolment_Information
					ON Delta_Enrolment_Information.CourseID = OGP_Enrolment.OriginalCourseID --Important
					AND Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
						LEFT JOIN Course
						ON Delta_Enrolment_Information.CourseID = Course.ID
							LEFT JOIN Delta_Category
							ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
							AND Delta_Category.IsActive = 1

	WHERE 
		OGP_Enrolment.CourseID = CAST(@ID AS INT)
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus <> 'Obsolete'

END

--LearningAim
IF @ShowAllCourses = 1 AND @GroupingType = 'LearningAim'
BEGIN

	SELECT DISTINCT
		OGP_Student.ID
	INTO 
		#TempStudentsLAim
	FROM
		OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
				AND OGP_Student.RecordStatus <> 'Obsolete'
					INNER JOIN OGP_EnrolmentStatus
					ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
					AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'
	WHERE
			OGP_EnrolmentStatus.LearningAimRef = @ID
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID

	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		--COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		--COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		EnrolmentCourse.ID,
		EnrolmentCourse.CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		DC.ID AS DeltaCategoryID,
		DC.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN Course EnrolmentCourse
				ON EnrolmentCourse.ID = OGP_Enrolment.CourseID
					INNER JOIN #TempStudentsLAim
					ON OGP_Student.ID = #TempStudentsLAim.ID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.OGP_StudentID = OGP_Student.ID
						AND Delta_Enrolment_Information.CourseID = OGP_Enrolment.CourseID
								LEFT JOIN (SELECT Delta_Category.ID, Delta_Category.DisplayName FROM Delta_Category WHERE Delta_Category.IsActive = 1) DC
								ON Delta_Enrolment_Information.DeltaCategoryID = DC.ID	
	WHERE 
		OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')

	--INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	--SELECT DISTINCT
	--	OGP_Enrolment.AcademicYearID,
	--	OGP_Enrolment.ID AS OGP_EnrolmentID,
	--	OGP_Student.ID AS OGP_StudentID,
	--	COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
	--	COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
	--	OGP_Enrolment.OverallCompletionID,
	--	--Delta_Enrolment_Information.DeltaCategoryID,
	--	Delta_Category.ID AS DeltaCategoryID,
	--	Delta_Category.DisplayName,
	--	Delta_Enrolment_Information.[Value],
	--	Delta_Enrolment_Information.[Information],
	--	Delta_Enrolment_Information.Imported_Date
	--FROM
	--	OGP_Student
	--		INNER JOIN OGP_Enrolment
	--		ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
	--			INNER JOIN OGP_EnrolmentStatus
	--			ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
	--				INNER JOIN Course EnrolmentCourse 
	--				ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
	--					LEFT JOIN Delta_Enrolment_Information
	--					ON Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
	--						LEFT JOIN Course
	--						ON Delta_Enrolment_Information.CourseID = Course.ID
	--							LEFT JOIN Delta_Category
	--							ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
	--							AND Delta_Category.IsActive = 1
	--WHERE 
	--	OGP_EnrolmentStatus.LearningAimRef = @ID
	--	AND OGP_Enrolment.AcademicYearID = @AcademicYearID
	--	AND OGP_Student.RecordStatus <> 'Obsolete'
	--	AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
	--	AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'

END
IF @ShowAllCourses = 0 AND @GroupingType = 'LearningAim'
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, EnrolmentCourse.ID) AS CourseID,
		COALESCE(Course.CourseCode, EnrolmentCourse.CourseCode) AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN OGP_EnrolmentStatus
				ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
					INNER JOIN Course EnrolmentCourse 
					ON OGP_Enrolment.OriginalCourseID = EnrolmentCourse.ID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.CourseID = OGP_Enrolment.OriginalCourseID --Important
						AND Delta_Enrolment_Information.OGP_StudentID = OGP_Enrolment.OGP_StudentID
							LEFT JOIN Course
							ON Delta_Enrolment_Information.CourseID = Course.ID
								LEFT JOIN Delta_Category
								ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
								AND Delta_Category.IsActive = 1
	WHERE 
		OGP_EnrolmentStatus.LearningAimRef = @ID
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus <> 'Obsolete'
		AND OGP_EnrolmentStatus.RecordStatus <> 'Obsolete'

END

--CollegeStructure (DEPT)
IF @ShowAllCourses = 1 AND (@GroupingType = 'CollegeStructure' OR @GroupingType = 'DEPARTMENT' OR @GroupingType = 'DEPT')
BEGIN

	SELECT DISTINCT
		OGP_Student.ID
	INTO 
		#TempStudentsCollStruc
	FROM
		OGP_Student
				INNER JOIN OGP_Enrolment
				ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete','Adhoc')
				AND OGP_Student.RecordStatus <> 'Obsolete'
					INNER JOIN OGP_GroupEnrolment
					ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
						INNER JOIN OGP_Group
						ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
						AND OGP_Group.RecordStatus <> 'Obsolete'
							INNER JOIN OGP_CollegeStructureGroup
							ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID
							AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
	WHERE
			OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT)
			AND OGP_Enrolment.AcademicYearID = @AcademicYearID

	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		--COALESCE(Delta_Enrolment_Information.CourseID, EnrolCourse.ID) AS CourseID,
		--COALESCE(Course.CourseCode, EnrolCourse.CourseCode) AS CourseCode,
		EnrolCourse.ID AS CourseID,
		EnrolCourse.CourseCode AS CourseCode,
		--Course.ID,
		--Course.CourseCode,
		OGP_Enrolment.OverallCompletionID,
		----Delta_Enrolment_Information.DeltaCategoryID,
		DC.ID AS DeltaCategoryID,
		DC.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
			AND OGP_Student.RecordStatus <> 'Obsolete'
				INNER JOIN #TempStudentsCollStruc
				ON #TempStudentsCollStruc.ID = OGP_Enrolment.OGP_StudentID
					INNER JOIN Course EnrolCourse
					ON EnrolCourse.ID = OGP_Enrolment.CourseID
						LEFT JOIN Delta_Enrolment_Information
						ON Delta_Enrolment_Information.OGP_StudentID = OGP_Student.ID
						AND Delta_Enrolment_Information.CourseID = OGP_Enrolment.CourseID
								LEFT JOIN (SELECT Delta_Category.ID, Delta_Category.DisplayName FROM Delta_Category WHERE Delta_Category.IsActive = 1) DC
								ON Delta_Enrolment_Information.DeltaCategoryID = DC.ID	

	--INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	--SELECT DISTINCT
	--	OGP_Enrolment.AcademicYearID,
	--	OGP_Enrolment.ID AS OGP_EnrolmentID,
	--	OGP_Student.ID AS OGP_StudentID,
	--	COALESCE(Delta_Enrolment_Information.CourseID, EnrolCourse.ID) AS CourseID,
	--	COALESCE(Course.CourseCode, EnrolCourse.CourseCode) AS CourseCode,
	--	--EnrolCourse.ID AS CourseID,
	--	--EnrolCourse.CourseCode AS CourseCode,
	--	OGP_Enrolment.OverallCompletionID,
	--	--Delta_Enrolment_Information.DeltaCategoryID,
	--	Delta_Category.ID AS DeltaCategoryID,
	--	Delta_Category.DisplayName,
	--	Delta_Enrolment_Information.[Value],
	--	Delta_Enrolment_Information.[Information],
	--	Delta_Enrolment_Information.Imported_Date
	--FROM
	--	OGP_Student
	--		INNER JOIN OGP_Enrolment
	--		ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
	--			INNER JOIN OGP_GroupEnrolment
	--			ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
	--				INNER JOIN Course EnrolCourse
	--				ON EnrolCourse.ID = OGP_Enrolment.CourseID
	--				INNER JOIN OGP_Group
	--				ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
	--					INNER JOIN  OGP_CollegeStructureGroup
	--					ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID
	--						LEFT JOIN Delta_Enrolment_Information
	--						ON Delta_Enrolment_Information.OGP_StudentID = OGP_Student.ID
	--							LEFT JOIN Course  
	--							ON Delta_Enrolment_Information.CourseID = Course.ID
	--								LEFT JOIN Delta_Category
	--								ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
	--								AND Delta_Category.IsActive = 1
	--WHERE 
	--	OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT)
	--	AND OGP_Enrolment.AcademicYearID = @AcademicYearID
	--	AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
	--	AND OGP_Group.RecordStatus <> 'Obsolete'
	--	AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
	--	AND OGP_Student.RecordStatus <> 'Obsolete'
	--	AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')
		
END
IF @ShowAllCourses = 0 AND (@GroupingType = 'CollegeStructure' OR @GroupingType = 'DEPARTMENT' OR @GroupingType = 'DEPT')
BEGIN
	INSERT #Temp (AcademicYearID, OGP_EnrolmentID, OGP_StudentID, CourseID, CourseCode, CompletionID, DeltaCategoryID, DisplayName, [Value], [Information], Imported_Date)
	SELECT DISTINCT
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS OGP_EnrolmentID,
		OGP_Student.ID AS OGP_StudentID,
		COALESCE(Delta_Enrolment_Information.CourseID, Course.ID) AS CourseID,
		Course.CourseCode AS CourseCode,
		OGP_Enrolment.OverallCompletionID,
		--Delta_Enrolment_Information.DeltaCategoryID,
		Delta_Category.ID AS DeltaCategoryID,
		Delta_Category.DisplayName,
		Delta_Enrolment_Information.[Value],
		Delta_Enrolment_Information.[Information],
		Delta_Enrolment_Information.Imported_Date
	FROM
		OGP_Student
			INNER JOIN OGP_Enrolment
			ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
				INNER JOIN OGP_GroupEnrolment
				ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
					INNER JOIN OGP_Group
					ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
						INNER JOIN  OGP_CollegeStructureGroup
						ON OGP_Group.ID = OGP_CollegeStructureGroup.OGP_GroupID
							INNER JOIN Course  
							ON OGP_Enrolment.OriginalCourseID = Course.ID
								LEFT JOIN Delta_Enrolment_Information
								ON Delta_Enrolment_Information.CourseID = Course.ID
								AND Delta_Enrolment_Information.OGP_StudentID = OGP_Student.ID
										LEFT JOIN Delta_Category
										ON Delta_Enrolment_Information.DeltaCategoryID = Delta_Category.ID
										AND Delta_Category.IsActive = 1
	WHERE 
		OGP_CollegeStructureGroup.OGP_CollegeStructureID = CAST(@ID AS INT)
		AND OGP_Enrolment.AcademicYearID = @AcademicYearID
		AND OGP_CollegeStructureGroup.RecordStatus <> 'Obsolete'
		AND OGP_Group.RecordStatus <> 'Obsolete'
		AND OGP_GroupEnrolment.RecordStatus <> 'Obsolete'
		AND OGP_Student.RecordStatus <> 'Obsolete'
		AND OGP_Enrolment.RecordStatus NOT IN ('Obsolete', 'Adhoc')

END


----------------------------------------------------------
--Populate a #TempPivot with the VALUES we need to display
----------------------------------------------------------

SELECT 
	*
INTO #TempPivot
FROM  
	(
	  SELECT 
		  Delta_Category.SystemName AS DeltaSystemName, 
		  #Temp.AcademicYearID,
		  #Temp.[OGP_StudentID], 
		  #Temp.OGP_EnrolmentID,
		  #Temp.[CourseID], 
		  #Temp.CourseCode,
		  #Temp.CompletionID,
		  [Value]   
	  FROM 
		#Temp
		  LEFT JOIN Delta_Category
		  ON Delta_Category.ID = #Temp.DeltaCategoryID
	) AS SourceTable  
	PIVOT  
	(  
	  MAX([Value])--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR DeltaSystemName IN ([Attendance], [Punctuality], [Progress], [WorkOutstanding], 
								[LateStart], [ExceptionalEntry], [PTWorkHours], [WorkPlacement], 
								[Enrichment], [Comments], [Behavioural], [Skills],
								[User1], [User2], [User3], [User4],
								[User5], [User6], [User7], [User8])
	) AS PivotTable
  
-------------------------------------------------------------------
--Populate a #TempPivotInfo with the Information we need to display
-------------------------------------------------------------------
SELECT 
	OGP_EnrolmentID,
	[Attendance] AS [Attendance_Info], 
	[Punctuality] AS [Punctuality_Info], 
	[Progress] AS [Progress_Info] ,
	[WorkOutstanding] AS [WorkOutstanding_Info],
	[LateStart] AS [LateStart_Info],
	[ExceptionalEntry] AS [ExceptionalEntry_Info],
	[PTWorkHours] AS [PTWorkHours_Info],
	[WorkPlacement] AS [WorkPlacement_Info],
	[Enrichment] AS [Enrichment_Info], 
	[Comments] AS [Comments_Info],
	[Behavioural] AS [Behavioural_Info],
	[Skills] AS [Skills_Info],
	[User1] AS [User1_Info],
	[User2] AS [User2_Info],
	[User3] AS [User3_Info],
	[User4] AS [User4_Info],
	[User5] AS [User5_Info],
	[User6] AS [User6_Info],
	[User7] AS [User7_Info],
	[User8] AS [User8_Info]
INTO #TempPivotInfo
FROM  
	(
	  SELECT 
		  Delta_Category.SystemName AS DeltaSystemName, 
		  #Temp.OGP_EnrolmentID,
		  #Temp.Information
	  FROM 
		#Temp
		  LEFT JOIN Delta_Category
		  ON Delta_Category.ID = #Temp.DeltaCategoryID
	) AS SourceTable  
	PIVOT  
	(  
	  MAX([Information])--There should only be one value, but we need MAX, MIN, SUM, COUNT or something.
	  FOR DeltaSystemName IN ([Attendance], [Punctuality], [Progress], [WorkOutstanding], 
								[LateStart], [ExceptionalEntry], [PTWorkHours], [WorkPlacement], 
								[Enrichment], [Comments], [Behavioural], [Skills],
								[User1], [User2], [User3], [User4],
								[User5], [User6], [User7], [User8]) 
	) AS PivotTable


-------------------------------------------------------------
--SELECT out the results joining #TempPivot to #TempPivotInfo
-------------------------------------------------------------
SELECT DISTINCT
	#TempPivot.*, 
	OGP_Student.StudentRef, 
	OGP_Student.Forenames, 
	OGP_Student.Surname, 
	OGP_Enrolment.OverallCompletionID, (SELECT [Description] FROM Completion WHERE ID = OGP_Enrolment.OverallCompletionID) AS CompletionStatus,
	(SELECT Course.Title FROM Course WHERE Course.ID = #TempPivot.CourseID) AS CourseTitle,
	#TempPivotInfo.[Attendance_Info], #TempPivotInfo.[Punctuality_Info], #TempPivotInfo.[Progress_Info], #TempPivotInfo.[WorkOutstanding_Info],
	#TempPivotInfo.[LateStart_Info], #TempPivotInfo.[ExceptionalEntry_Info], #TempPivotInfo.[PTWorkHours_Info], #TempPivotInfo.[WorkPlacement_Info],
	#TempPivotInfo.[Enrichment_Info], #TempPivotInfo.[Comments_Info], #TempPivotInfo.[Behavioural_Info], #TempPivotInfo.[Skills_Info],
	#TempPivotInfo.[User1_Info], #TempPivotInfo.[User2_Info], #TempPivotInfo.[User3_Info], #TempPivotInfo.[User4_Info], 
	#TempPivotInfo.[User5_Info], #TempPivotInfo.[User6_Info], #TempPivotInfo.[User7_Info], #TempPivotInfo.[User8_Info],
	Delta_Student_InformationFlag.StudentFlagValue1, StudentFlagValue2, StudentFlagValue3, StudentFlagValue4,
	StudentFlagValue5, StudentFlagValue6, StudentFlagValue7, StudentFlagValue8,
	StudentFlagValue9, StudentFlagValue10, StudentFlagValue11, StudentFlagValue12,
	StudentFlagValue13, StudentFlagValue14,	StudentFlagValue15, StudentFlagValue16, StudentFlagValue17, StudentFlagValue18,
	CASE WHEN Delta_Watchlist.OGP_StudentID = OGP_Student.ID THEN 1 ELSE 0 END AS IsInWatchlist
FROM 
	#TempPivotInfo
	INNER JOIN #TempPivot
	ON #TempPivotInfo.OGP_EnrolmentID = #TempPivot.OGP_EnrolmentID
		INNER JOIN OGP_Student
		ON #TempPivot.OGP_StudentID = OGP_Student.ID
			INNER JOIN OGP_Enrolment
			ON #TempPivotInfo.OGP_EnrolmentID = OGP_Enrolment.ID 
				LEFT JOIN Delta_Student_InformationFlag
				ON OGP_Student.ID  = Delta_Student_InformationFlag.OGP_StudentID
					LEFT JOIN Delta_Watchlist
					ON OGP_Student.ID = Delta_Watchlist.OGP_StudentID
					AND Delta_Watchlist.StaffID = @StaffID
ORDER BY Surname, Forenames, StudentRef

GO



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [sp_WebPlus_Populate_OGP_Tables_After_Import]
@AcademicYearID AS varchar(5)
AS

-- =============================================
-- Author:		Andrew Genner
-- Create date: 17/03/2023 
-- Description:	Populate the OGP Student, Enrolment, Group, College Structure tables
--              This SP will run after an import into the Enrolment or EngMatEnrolment / Student tables
--25/04/2023:   Added in a section to update any Adhoc OGP_Enrolment and OGP_EnrolmentStatus records to reflect the Completion Status of their original imported Enrolmentrecords
--22/07/2023:	Added a cleanup routine to remove Groups from OGP tables that don't exist in the VA or EM tables.
--09/09/2023:	The Enrolment OverallCompletionID should only be based on 'Imported' records.
--19/09/2023:	INSERT into OGP_Group - added a MAX(OGP_GroupTitle) and GROUP BY just in case the same group code has different names when pulled from the vEnrolment/vEngMatEnrolment views.
--02/10/2023:	Cleanup the OGP_CollegeStructureGroup.  If Group-CollegeStructure relationships no longer exist in Enrolment/EngMatEnrolment, set them to be obsolete.
--07/11/2023:	OGP_CollegeStructure Status is now updated 
--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '22/23'
--15/11/2023:	Any OGP_GroupStaff and OGP_GroupEnrolments that were obsolete are now set to imported if they reappear
--17/11/2023:	Any Adhoc records are reinstated correctly with RecordStatus = 'Adhoc'
--22/01/2024:	Adhoc Groups & Enrols.  If any have been created Adhoc and the Enrol / EngMatEnrol tables now contain these Enrols, the Adhoc records are updated to Imported.

declare @start datetime = getdate()
--declare @executionTimeInMilliseconds int

--This will be called after the Student or EngMatStudent Import
-----------------------------------------------------------------------------------------------------------------------
--INSERT OGP_Student with the EngMatStudents that don't exist
-----------------------------------------------------------------------------------------------------------------------
INSERT OGP_Student 
		(AcademicYearID, StudentRef, Surname, Forenames, DOB, EthnicityID, Gender, UserDefinedString1, 
		UserDefinedString2, UserDefinedNumber, UserDefinedDate, UserDefinedString3, UserDefinedString4, 
		LLDDandHealthProblemID, FreeSchoolMeal, 
		Exempt_DiffDisab, Exempt_Overseas, Exempt_LessThan150Hrs,
		UserDefinedString5, UserDefinedString6, 
		UserDefinedString7, UserDefinedString8, UserDefinedNumber2, RecordStatus)
SELECT 
	AcademicYearID, StudentRef, Surname, Forenames, DOB, EthnicityID, Gender, UserDefinedString1, 
	UserDefinedString2, UserDefinedNumber, UserDefinedDate, UserDefinedString3, UserDefinedString4, 
	LLDDandHealthProblemID, FreeSchoolMeal, 
	Exempt_DiffDisab, Exempt_Overseas, Exempt_LessThan150Hrs,
	UserDefinedString5, UserDefinedString6, 
	UserDefinedString7, UserDefinedString8, UserDefinedNumber2, 'Imported' AS RecordStatus
FROM
	EngMatStudent
WHERE 
	NOT EXISTS (SELECT ID FROM OGP_Student WHERE OGP_Student.AcademicYearID = EngMatStudent.AcademicYearID AND OGP_Student.StudentRef = EngMatStudent.StudentRef)
	AND EngMatStudent.AcademicYearID = @AcademicYearID

-----------------------------------------------------------------------------------------------------------------------
--UPDATE OGP_Student with the EngMatStudents details that do exist
--Do EngMatStudent first because the details fields from Student (VA) will take precedence is a student appears in both
-----------------------------------------------------------------------------------------------------------------------
UPDATE OGP_Student
SET	OGP_Student.Surname = EngMatStudent.Surname, OGP_Student.Forenames = EngMatStudent.Forenames, OGP_Student.DOB = EngMatStudent.DOB, 
	OGP_Student.EthnicityID = EngMatStudent.EthnicityID, OGP_Student.Gender = EngMatStudent.Gender, OGP_Student.UserDefinedString1 = EngMatStudent.UserDefinedString1,
	OGP_Student.UserDefinedString2 = EngMatStudent.UserDefinedString2, OGP_Student.UserDefinedNumber = EngMatStudent.UserDefinedNumber, 
	OGP_Student.UserDefinedDate = EngMatStudent.UserDefinedDate, OGP_Student.UserDefinedString3 = EngMatStudent.UserDefinedString3, 
	OGP_Student.UserDefinedString4 = EngMatStudent.UserDefinedString4, 
	OGP_Student.LLDDandHealthProblemID = EngMatStudent.LLDDandHealthProblemID, OGP_Student.FreeSchoolMeal = EngMatStudent.FreeSchoolMeal, 
	OGP_Student.Exempt_DiffDisab = EngMatStudent.Exempt_DiffDisab, OGP_Student.Exempt_Overseas = EngMatStudent.Exempt_Overseas, OGP_Student.Exempt_LessThan150Hrs = EngMatStudent.Exempt_LessThan150Hrs,
	OGP_Student.UserDefinedString5 = EngMatStudent.UserDefinedString5, OGP_Student.UserDefinedString6 = EngMatStudent.UserDefinedString6, 
	OGP_Student.UserDefinedString7 = EngMatStudent.UserDefinedString7, OGP_Student.UserDefinedString8 = EngMatStudent.UserDefinedString8, 
	OGP_Student.UserDefinedNumber2 = EngMatStudent.UserDefinedNumber2, OGP_Student.RecordStatus = 'Imported'
FROM
	OGP_Student 
		INNER JOIN EngMatStudent	
		ON OGP_Student.AcademicYearID = EngMatStudent.AcademicYearID
		AND OGP_Student.StudentRef = EngMatStudent.StudentRef
WHERE 
	EXISTS (SELECT ID FROM OGP_Student WHERE OGP_Student.AcademicYearID = EngMatStudent.AcademicYearID AND OGP_Student.StudentRef = EngMatStudent.StudentRef)
	AND EngMatStudent.AcademicYearID = @AcademicYearID


----------------------------------------------------------------------------------------------------
--Before we start doing anything, we need to compare the Adhoc Groups and their Adhoc Enrolments and
--see if there are any recs in the Enrolment or EngMatEnrolment tables that should now replace these 
--Adhoc enrolments and become Imported records
----------------------------------------------------------------------------------------------------
--Find the incoming enrolments and see if there are any matching adhoc enrolments (check on incoming.courseID - adhoc.courseID)
--For any of those, we need to change the adhoc.originalcourseID to the same as the incoming.originalcourseID
--The OGP_GroupEnrolment needs changing from Adhoc to Imported.

--These are the incoming enrolments that match Adhoc created enrolments in OGP table
SELECT Enrolment.AcademicYearID, Enrolment.StudentRef, Enrolment.CourseID, OGP_Enrolment.OriginalCourseID
INTO #TempNewEnrols
FROM Enrolment
INNER JOIN OGP_Enrolment ON Enrolment.AcademicYearID = OGP_Enrolment.AcademicYearID AND Enrolment.StudentRef = OGP_Enrolment.StudentRef AND Enrolment.CourseID = OGP_Enrolment.CourseID
AND OGP_Enrolment.CourseID <> OGP_Enrolment.OriginalCourseID AND Enrolment.AcademicYearID = @AcademicYearID
UNION
SELECT EngMatEnrolment.AcademicYearID, EngMatEnrolment.StudentRef, EngMatEnrolment.CourseID, OGP_Enrolment.OriginalCourseID
FROM EngMatEnrolment
INNER JOIN OGP_Enrolment ON EngMatEnrolment.AcademicYearID = OGP_Enrolment.AcademicYearID AND EngMatEnrolment.StudentRef = OGP_Enrolment.StudentRef AND EngMatEnrolment.CourseID = OGP_Enrolment.CourseID
AND OGP_Enrolment.CourseID <> OGP_Enrolment.OriginalCourseID AND EngMatEnrolment.AcademicYearID = @AcademicYearID

--We then need to update the OGP_Enrolment records and set the CourseID to be the same as the OriginalCourseID
UPDATE OGP_Enrolment SET OGP_Enrolment.OriginalCourseID = OGP_Enrolment.CourseID, OGP_Enrolment.RecordStatus = 'Imported'
FROM OGP_Enrolment INNER JOIN #TempNewEnrols
ON OGP_Enrolment.AcademicYearID = #TempNewEnrols.AcademicYearID
AND OGP_Enrolment.StudentRef = #TempNewEnrols.StudentRef
AND OGP_Enrolment.CourseID = #TempNewEnrols.CourseID

--We then don't need the OGP_EnrolmentStatus records or the OGP_GroupEnrolment records
DELETE OGP_EnrolmentStatus 
--select OGP_EnrolmentStatus.*
FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment 
ON OGP_Enrolment.ID = OGP_EnrolmentStatus.OGP_EnrolmentID
INNER JOIN #TempNewEnrols
ON OGP_Enrolment.AcademicYearID = #TempNewEnrols.AcademicYearID
AND OGP_Enrolment.StudentRef = #TempNewEnrols.StudentRef
AND OGP_Enrolment.CourseID = #TempNewEnrols.CourseID
AND OGP_EnrolmentStatus.RecordStatus = 'Adhoc'

DELETE OGP_GroupEnrolment 
--select OGP_GroupEnrolment.*
FROM OGP_GroupEnrolment INNER JOIN OGP_Enrolment 
ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
INNER JOIN #TempNewEnrols
ON OGP_Enrolment.AcademicYearID = #TempNewEnrols.AcademicYearID
AND OGP_Enrolment.StudentRef = #TempNewEnrols.StudentRef
AND OGP_Enrolment.CourseID = #TempNewEnrols.CourseID
AND OGP_GroupEnrolment.RecordStatus = 'Adhoc'

--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '20/21'


INSERT OGP_Enrolment (AcademicYearID, OGP_StudentID, CourseID, OriginalCourseID, OverallCompletionID, StudentRef, RecordStatus)

SELECT DISTINCT
	EngMatStudent.AcademicYearID,
	OGP_Student.ID AS OGP_StudentID,
	EngMatEnrolment.CourseID,
	EngMatEnrolment.CourseID AS OriginalCourseID, --OriginalCourseID is purely informational and used to retreive VA data for students in manually created groups.
	1 AS OverallCompletionID, --Use this just to populate.  
	OGP_Student.StudentRef,
	'Imported' AS RecordStatus
FROM
	EngMatStudent
	INNER JOIN OGP_Student
	ON EngMatStudent.AcademicYearID = OGP_Student.AcademicYearID
	AND EngMatStudent.StudentRef = OGP_Student.StudentRef
	AND EngMatStudent.AcademicYearID = @AcademicYearID
		INNER JOIN EngMatEnrolment
		ON EngMatStudent.ID = EngMatEnrolment.EngMatStudentID
WHERE NOT EXISTS	(SELECT OGP_Enrolment.ID FROM OGP_Enrolment 
						INNER JOIN OGP_Student 
						ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					WHERE OGP_Student.AcademicYearID = EngMatStudent.AcademicYearID
					AND OGP_Student.StudentRef = EngMatStudent.StudentRef
					AND OGP_Enrolment.CourseID = EngMatEnrolment.CourseID
					AND EngMatStudent.AcademicYearID = @AcademicYearID
					AND EngMatEnrolment.AcademicYearID = @AcademicYearID
					)
AND (SELECT vEngMatEnrolment.EngMatType FROM vEngMatEnrolment WHERE vEngMatEnrolment.ID = EngMatEnrolment.ID AND vEngMatEnrolment.AcademicYearID = @AcademicYearID) IN ('English')


INSERT OGP_Enrolment (AcademicYearID, OGP_StudentID, CourseID, OriginalCourseID, OverallCompletionID, StudentRef, RecordStatus)

SELECT DISTINCT
	EngMatStudent.AcademicYearID,
	OGP_Student.ID AS OGP_StudentID,
	EngMatEnrolment.CourseID,
	EngMatEnrolment.CourseID AS OriginalCourseID, --OriginalCourseID is purely informational and used to retreive VA data for students in manually created groups.
	1 AS OverallCompletionID, --USe this just to populate.  
	OGP_Student.StudentRef,
	'Imported' AS RecordStatus
FROM
	EngMatStudent
	INNER JOIN OGP_Student
	ON EngMatStudent.AcademicYearID = OGP_Student.AcademicYearID
	AND EngMatStudent.StudentRef = OGP_Student.StudentRef
	AND EngMatStudent.AcademicYearID = @AcademicYearID
		INNER JOIN EngMatEnrolment
		ON EngMatStudent.ID = EngMatEnrolment.EngMatStudentID
WHERE NOT EXISTS	(SELECT OGP_Enrolment.ID FROM OGP_Enrolment 
						INNER JOIN OGP_Student 
						ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					WHERE OGP_Student.AcademicYearID = EngMatStudent.AcademicYearID
					AND OGP_Student.StudentRef = EngMatStudent.StudentRef
					AND OGP_Enrolment.CourseID = EngMatEnrolment.CourseID
					AND EngMatStudent.AcademicYearID = @AcademicYearID
					AND EngMatEnrolment.AcademicYearID = @AcademicYearID
					)
AND (SELECT vEngMatEnrolment.EngMatType FROM vEngMatEnrolment WHERE vEngMatEnrolment.ID = EngMatEnrolment.ID AND vEngMatEnrolment.AcademicYearID = @AcademicYearID) IN ('Maths')

-- We need to hold the UDFs in the OGP_Enrolment table, but we need to take the set associated to the enrolment with the most recent enrolment Start Date, lowest Completion, lowestActual, LowestLAim
SELECT 
OGP_Enrolment.OGP_StudentID AS OGP_StudentID, OGP_Enrolment.ID AS OGP_EnrolmentID, t.AcademicYearID, t.StudentRef, t.CourseID, 
t.UserDefinedString1, t.UserDefinedString2, t.UserDefinedNumber, t.UserDefinedDate,
t.UserDefinedString3, t.UserDefinedString4, t.UserDefinedString5, 
t.UserDefinedString6, t.UserDefinedString7, t.UserDefinedString8, t.UserDefinedNumber2
INTO #TempEnglishMathsUDFs
FROM
(
	SELECT
	EngMatEnrolment.*, ROW_NUMBER() OVER(PARTITION BY AcademicYearID, StudentRef, CourseID ORDER BY StartDate DESC, CompletionID ASC, ActualEndDate ASC, LearningAimRef ASC) AS RowNumber
	FROM
	EngMatEnrolment
	WHERE
	EngMatEnrolment.AcademicYearID = @AcademicYearID
) t
INNER JOIN OGP_Enrolment 
	ON OGP_Enrolment.AcademicYearID = t.AcademicYearID
	AND OGP_Enrolment.StudentRef = t.StudentRef
	AND OGP_Enrolment.CourseID = t.CourseID
WHERE t.RowNumber = 1


UPDATE OGP_Enrolment
SET 	OGP_Enrolment.UserDefinedString1 = #TempEnglishMathsUDFs.UserDefinedString1, OGP_Enrolment.UserDefinedString2 = #TempEnglishMathsUDFs.UserDefinedString2, 
		OGP_Enrolment.UserDefinedNumber = #TempEnglishMathsUDFs.UserDefinedNumber, 
		OGP_Enrolment.UserDefinedDate = #TempEnglishMathsUDFs.UserDefinedDate, OGP_Enrolment.UserDefinedString3 = #TempEnglishMathsUDFs.UserDefinedString3, 
		OGP_Enrolment.UserDefinedString4 = #TempEnglishMathsUDFs.UserDefinedString4, OGP_Enrolment.UserDefinedString5 = #TempEnglishMathsUDFs.UserDefinedString5,
		OGP_Enrolment.UserDefinedString6 = #TempEnglishMathsUDFs.UserDefinedString6, OGP_Enrolment.UserDefinedString7 = #TempEnglishMathsUDFs.UserDefinedString7,
		OGP_Enrolment.UserDefinedString8 = #TempEnglishMathsUDFs.UserDefinedString8, OGP_Enrolment.UserDefinedNumber2 = #TempEnglishMathsUDFs.UserDefinedNumber2,
		RecordStatus = 'Imported'
FROM
#TempEnglishMathsUDFs
INNER JOIN OGP_Enrolment
ON #TempEnglishMathsUDFs.OGP_EnrolmentID = OGP_Enrolment.ID



--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '22/23'


--OGP_GroupEnrolment:
--Fill in the OGP_Group table first...
SELECT DISTINCT AcademicYearID, StudentRef, CourseID, TeachingGroupCode, TeachingGroupTitle, 'Maths' AS OGP_TypeCode, 0 AS OGP_GroupID INTO #Temp_EnrolmentGroup FROM vEngMatEnrolment WHERE LEN(ISNULL(vEngMatEnrolment.TeachingGroupCode,'')) > 0 AND vEngMatEnrolment.AcademicYearID = @AcademicYearID AND vEngMatEnrolment.EngMatType = 'Maths'
UNION
SELECT DISTINCT AcademicYearID, StudentRef, CourseID, TeachingGroupCode, TeachingGroupTitle, 'English' AS OGP_TypeCode, 0 AS OGP_GroupID FROM vEngMatEnrolment WHERE LEN(ISNULL(vEngMatEnrolment.TeachingGroupCode,'')) > 0 AND vEngMatEnrolment.AcademicYearID = @AcademicYearID AND vEngMatEnrolment.EngMatType = 'English'

INSERT OGP_GROUP (CourseID, AcademicYearID, OGP_TypeCode, OGP_GroupCode, OGP_GroupTitle, Owner_StaffID, RecordStatus)
SELECT DISTINCT
	#Temp_EnrolmentGroup.CourseID,
	#Temp_EnrolmentGroup.AcademicYearID,
	#Temp_EnrolmentGroup.OGP_TypeCode,
	#Temp_EnrolmentGroup.TeachingGroupCode AS OGP_GroupCode,
	MAX(#Temp_EnrolmentGroup.TeachingGroupTitle) AS OGP_GroupTitle,
	NULL AS Owner_StaffID, --we don't know who owns the group!
	'Imported' AS RecordStatus
FROM
	#Temp_EnrolmentGroup
WHERE NOT EXISTS	(SELECT OGP_Group.ID FROM OGP_Group 
					WHERE OGP_Group.OGP_GroupCode = #Temp_EnrolmentGroup.TeachingGroupCode
					AND OGP_Group.CourseID = #Temp_EnrolmentGroup.CourseID
					AND OGP_Group.OGP_TypeCode = #Temp_EnrolmentGroup.OGP_TypeCode
					)
GROUP BY 
	#Temp_EnrolmentGroup.CourseID,
	#Temp_EnrolmentGroup.AcademicYearID,
	#Temp_EnrolmentGroup.OGP_TypeCode,
	#Temp_EnrolmentGroup.TeachingGroupCode

UPDATE #Temp_EnrolmentGroup 
SET OGP_GroupID = OGP_Group.ID 
FROM #Temp_EnrolmentGroup
INNER JOIN OGP_Group ON #Temp_EnrolmentGroup.CourseID = OGP_Group.CourseID
AND #Temp_EnrolmentGroup.TeachingGroupCode = OGP_Group.OGP_GroupCode
AND #Temp_EnrolmentGroup.OGP_TypeCode = OGP_Group.OGP_TypeCode

--If a Group has already been inserted but is obsolete or Adhoc and exists in the #Temp_EnrolmentGroup table, set it to Imported.
UPDATE OGP_Group SET OGP_GROUP.RecordStatus = 'Imported'
FROM OGP_Group
INNER JOIN #Temp_EnrolmentGroup
ON OGP_Group.ID = #Temp_EnrolmentGroup.OGP_GroupID
WHERE OGP_Group.RecordStatus IN ('Obsolete')

--INSERT OGP_EnrolmentGroup... (for Maths)
INSERT OGP_GroupEnrolment (OGP_GroupID, OGP_EnrolmentID, RecordStatus)
SELECT DISTINCT
#Temp_EnrolmentGroup.OGP_GroupID,
OGP_Enrolment.ID AS OGP_EnrolmentID,
'Imported' AS RecordStatus
FROM
#Temp_EnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_EnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_EnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_EnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_EnrolmentGroup.OGP_TypeCode = 'Maths'
WHERE NOT EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID AND #Temp_EnrolmentGroup.OGP_TypeCode = 'Maths')

--Reinstate any OGP_GroupEnrolment records that were made obsolete or are 'Adhoc' - Maths
UPDATE OGP_GroupEnrolment SET RecordStatus = 'Imported'
FROM
#Temp_EnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_EnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_EnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_EnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_EnrolmentGroup.OGP_TypeCode = 'Maths'
INNER JOIN OGP_GroupEnrolment
ON OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID
AND OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
WHERE EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID AND #Temp_EnrolmentGroup.OGP_TypeCode = 'Maths')
AND OGP_GroupEnrolment.RecordStatus IN ('Obsolete')

--INSERT OGP_EnrolmentGroup... (for English)
INSERT OGP_GroupEnrolment (OGP_GroupID, OGP_EnrolmentID, RecordStatus)
SELECT DISTINCT
#Temp_EnrolmentGroup.OGP_GroupID,
OGP_Enrolment.ID AS OGP_EnrolmentID,
'Imported' AS RecordStatus
FROM
#Temp_EnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_EnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_EnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_EnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_EnrolmentGroup.OGP_TypeCode = 'English'
WHERE NOT EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID AND #Temp_EnrolmentGroup.OGP_TypeCode = 'English')

--Reinstate any OGP_GroupEnrolment records that were made obsolete - English
UPDATE OGP_GroupEnrolment SET RecordStatus = 'Imported'
FROM
#Temp_EnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_EnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_EnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_EnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_EnrolmentGroup.OGP_TypeCode = 'English'
INNER JOIN OGP_GroupEnrolment
ON OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID
AND OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
WHERE EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_EnrolmentGroup.OGP_GroupID AND #Temp_EnrolmentGroup.OGP_TypeCode = 'English')
AND OGP_GroupEnrolment.RecordStatus IN ('Obsolete')
--The OGP_EnrolmentStatus UQ of OGP_EnrolmentID, LearningAimRef, CompletionID, StartDate, ActualEndDate reflects the UQ of EngMatEnrolment, so we are OK
--Clear out the OGP_EnrolmentStatus table first, then repopulate... (DELETE is just the once from here - don't delete again later for VA records.)



DELETE FROM OGP_EnrolmentStatus WHERE RecordStatus IN ('Imported')--Do not touch the 'Adhoc' EnrolmentStatus records

INSERT OGP_EnrolmentStatus (OGP_EnrolmentID, OGP_TypeCode, LearningAimRef, CompletionID, StartDate, PlannedEndDate, ActualEndDate, Grade, OutcomeID, RecordStatus)
SELECT DISTINCT 
	OGP_Enrolment.ID AS OGP_EnrolmentID,
	#Temp_EnrolmentGroup.OGP_TypeCode,
	EngMatEnrolment.LearningAimRef,
	EngMatEnrolment.CompletionID,
	EngMatEnrolment.StartDate,
	EngMatEnrolment.PlannedEndDate,
	EngMatEnrolment.ActualEndDate,
	EngMatEnrolment.Grade,
	EngMatEnrolment.OutcomeID,
	'Imported' AS RecordStatus
FROM
	EngMatEnrolment
		INNER JOIN #Temp_EnrolmentGroup
		ON EngMatEnrolment.AcademicYearID = #Temp_EnrolmentGroup.AcademicYearID
		AND EngMatEnrolment.CourseID = #Temp_EnrolmentGroup.CourseID
		AND EngMatEnrolment.StudentRef = #Temp_EnrolmentGroup.StudentRef
				INNER JOIN OGP_Enrolment
				ON #Temp_EnrolmentGroup.CourseID = OGP_Enrolment.CourseID
				AND #Temp_EnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
				AND #Temp_EnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID


-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
--Student and Enrolment (VA) tables
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------
--INSERT OGP_Student with the Students that don't exist
-----------------------------------------------------------------------------------------------------------------------
--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '20/21'

INSERT OGP_Student 
		(AcademicYearID, StudentRef, Surname, Forenames, DOB, EthnicityID, Gender, UserDefinedString1, 
		UserDefinedString2, UserDefinedNumber, UserDefinedDate, UserDefinedString3, UserDefinedString4, 
		LLDDandHealthProblemID, FreeSchoolMeal, UserDefinedString5, UserDefinedString6, 
		UserDefinedString7, UserDefinedString8, UserDefinedNumber2, RecordStatus)

SELECT 
	AcademicYearID, StudentRef, Surname, Forenames, DOB, EthnicityID, Gender, UserDefinedString1, 
	UserDefinedString2, UserDefinedNumber, UserDefinedDate, UserDefinedString3, UserDefinedString4, 
	LLDDandHealthProblemID, FreeSchoolMeal, UserDefinedString5, UserDefinedString6, 
	UserDefinedString7, UserDefinedString8, UserDefinedNumber2, 'Imported' AS RecordStatus
FROM
	Student
WHERE 
	NOT EXISTS (SELECT ID FROM OGP_Student WHERE OGP_Student.AcademicYearID = Student.AcademicYearID AND OGP_Student.StudentRef = Student.StudentRef)
	AND Student.AcademicYearID = @AcademicYearID

-------------------------------------------------------------------------------------------------------------------
--UPDATE OGP_Student with the Students that do exist
--The details fields from Student (VA) will take precedence is a student appears in both Student and EngMatStudent
-------------------------------------------------------------------------------------------------------------------
UPDATE OGP_Student
SET	OGP_Student.Surname = Student.Surname, OGP_Student.Forenames = Student.Forenames, OGP_Student.DOB = Student.DOB, 
	OGP_Student.EthnicityID = Student.EthnicityID, OGP_Student.Gender = Student.Gender, OGP_Student.UserDefinedString1 = Student.UserDefinedString1,
	OGP_Student.UserDefinedString2 = Student.UserDefinedString2, OGP_Student.UserDefinedNumber = Student.UserDefinedNumber, 
	OGP_Student.UserDefinedDate = Student.UserDefinedDate, OGP_Student.UserDefinedString3 = Student.UserDefinedString3, 
	OGP_Student.UserDefinedString4 = Student.UserDefinedString4, 
	OGP_Student.LLDDandHealthProblemID = Student.LLDDandHealthProblemID, OGP_Student.FreeSchoolMeal = Student.FreeSchoolMeal, 
	OGP_Student.UserDefinedString5 = Student.UserDefinedString5, OGP_Student.UserDefinedString6 = Student.UserDefinedString6, 
	OGP_Student.UserDefinedString7 = Student.UserDefinedString7, OGP_Student.UserDefinedString8 = Student.UserDefinedString8, 
	OGP_Student.UserDefinedNumber2 = Student.UserDefinedNumber2, OGP_Student.RecordStatus = 'Imported'
FROM
	OGP_Student 
		INNER JOIN Student	
		ON OGP_Student.AcademicYearID = Student.AcademicYearID
		AND OGP_Student.StudentRef = Student.StudentRef
WHERE 
	EXISTS (SELECT ID FROM OGP_Student WHERE OGP_Student.AcademicYearID = Student.AcademicYearID AND OGP_Student.StudentRef = Student.StudentRef)
	AND Student.AcademicYearID = @AcademicYearID

--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '20/21'

INSERT OGP_Enrolment (AcademicYearID, OGP_StudentID, CourseID, OriginalCourseID, OverallCompletionID, StudentRef, RecordStatus)

SELECT DISTINCT
	Student.AcademicYearID,
	OGP_Student.ID AS OGP_StudentID,
	Enrolment.CourseID,
	Enrolment.CourseID AS OriginalCourseID, --OriginalCourseID is purely informational and used to retreive VA data for students in manually created groups.
	1 AS OverallCompletionID, --Use this just to populate.  
	OGP_Student.StudentRef,
	'Imported' AS RecordStatus
FROM
	Student
	INNER JOIN OGP_Student
	ON Student.AcademicYearID = OGP_Student.AcademicYearID
	AND Student.StudentRef = OGP_Student.StudentRef
	AND Student.AcademicYearID = @AcademicYearID
		INNER JOIN Enrolment
		ON Student.ID = Enrolment.StudentID
WHERE NOT EXISTS	(SELECT OGP_Enrolment.ID FROM OGP_Enrolment 
						INNER JOIN OGP_Student 
						ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
					WHERE OGP_Student.AcademicYearID = Student.AcademicYearID
					AND OGP_Student.StudentRef = Student.StudentRef
					AND OGP_Enrolment.CourseID = Enrolment.CourseID
					)

-- We need to hold the UDFs in the OGP_Enrolment table, but we need to take the set associated to the enrolment with the most recent enrolment Start Date, lowest Completion, lowestActual, LowestLAim
SELECT 
OGP_Enrolment.OGP_StudentID AS OGP_StudentID, OGP_Enrolment.ID AS OGP_EnrolmentID, t.AcademicYearID, t.StudentRef, t.CourseID, 
t.UserDefinedString1, t.UserDefinedString2, t.UserDefinedNumber, t.UserDefinedDate,
t.UserDefinedString3, t.UserDefinedString4, t.UserDefinedString5, 
t.UserDefinedString6, t.UserDefinedString7, t.UserDefinedString8, t.UserDefinedNumber2
INTO #TempVAUDFs
FROM
(
	SELECT
	Enrolment.*, ROW_NUMBER() OVER(PARTITION BY AcademicYearID, StudentRef, CourseID ORDER BY StartDate DESC, CompletionID ASC, LearningAimRef ASC) AS RowNumber
	FROM
	Enrolment
	WHERE
	Enrolment.AcademicYearID = @AcademicYearID
) t
INNER JOIN OGP_Enrolment 
	ON OGP_Enrolment.AcademicYearID = t.AcademicYearID
	AND OGP_Enrolment.StudentRef = t.StudentRef
	AND OGP_Enrolment.CourseID = t.CourseID
WHERE t.RowNumber = 1


UPDATE OGP_Enrolment
SET 	OGP_Enrolment.UserDefinedString1 = #TempVAUDFs.UserDefinedString1, OGP_Enrolment.UserDefinedString2 = #TempVAUDFs.UserDefinedString2, 
		OGP_Enrolment.UserDefinedNumber = #TempVAUDFs.UserDefinedNumber, 
		OGP_Enrolment.UserDefinedDate = #TempVAUDFs.UserDefinedDate, OGP_Enrolment.UserDefinedString3 = #TempVAUDFs.UserDefinedString3, 
		OGP_Enrolment.UserDefinedString4 = #TempVAUDFs.UserDefinedString4, OGP_Enrolment.UserDefinedString5 = #TempVAUDFs.UserDefinedString5,
		OGP_Enrolment.UserDefinedString6 = #TempVAUDFs.UserDefinedString6, OGP_Enrolment.UserDefinedString7 = #TempVAUDFs.UserDefinedString7,
		OGP_Enrolment.UserDefinedString8 = #TempVAUDFs.UserDefinedString8, OGP_Enrolment.UserDefinedNumber2 = #TempVAUDFs.UserDefinedNumber2,
		RecordStatus = 'Imported'
FROM
#TempVAUDFs
INNER JOIN OGP_Enrolment
ON #TempVAUDFs.OGP_EnrolmentID = OGP_Enrolment.ID


--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '19/20'

--drop table #Temp_VAEnrolmentGroup

--OGP_GroupEnrolment:
--Fill in the OGP_Group table first...
SELECT DISTINCT AcademicYearID, StudentRef, CourseID, TeachingGroupCode, TeachingGroupTitle, 'VA' AS OGP_TypeCode, 0 AS OGP_GroupID INTO #Temp_VAEnrolmentGroup FROM vEnrolment WHERE LEN(ISNULL(vEnrolment.TeachingGroupCode,'')) > 0 AND vEnrolment.AcademicYearID = @AcademicYearID

INSERT OGP_Group (CourseID, AcademicYearID, OGP_TypeCode, OGP_GroupCode, OGP_GroupTitle, Owner_StaffID, RecordStatus)
SELECT DISTINCT
	#Temp_VAEnrolmentGroup.CourseID,
	#Temp_VAEnrolmentGroup.AcademicYearID,
	#Temp_VAEnrolmentGroup.OGP_TypeCode,
	#Temp_VAEnrolmentGroup.TeachingGroupCode AS OGP_GroupCode,
	MAX(#Temp_VAEnrolmentGroup.TeachingGroupTitle) AS OGP_GroupTitle,
	NULL AS Owner_StaffID, --we don't know who owns the group!
	'Imported' AS RecordStatus
FROM
	#Temp_VAEnrolmentGroup
WHERE NOT EXISTS	(SELECT OGP_Group.ID FROM OGP_Group 
					WHERE OGP_Group.OGP_GroupCode = #Temp_VAEnrolmentGroup.TeachingGroupCode
					AND OGP_Group.CourseID = #Temp_VAEnrolmentGroup.CourseID
					AND OGP_Group.OGP_TypeCode = #Temp_VAEnrolmentGroup.OGP_TypeCode
					)
GROUP BY 
	#Temp_VAEnrolmentGroup.CourseID,
	#Temp_VAEnrolmentGroup.AcademicYearID,
	#Temp_VAEnrolmentGroup.OGP_TypeCode,
	#Temp_VAEnrolmentGroup.TeachingGroupCode

--UPDATE  #Temp_EnrolmentGroup with the GroupID
UPDATE #Temp_VAEnrolmentGroup 
SET OGP_GroupID = OGP_Group.ID 
FROM #Temp_VAEnrolmentGroup
INNER JOIN OGP_Group ON #Temp_VAEnrolmentGroup.CourseID = OGP_Group.CourseID
AND #Temp_VAEnrolmentGroup.TeachingGroupCode = OGP_Group.OGP_GroupCode
AND #Temp_VAEnrolmentGroup.OGP_TypeCode = OGP_Group.OGP_TypeCode

--If a Group has already been inserted but is obsolete or Adhoc and exists in the #Temp_VAEnrolmentGroup table, set it to Imported.
UPDATE OGP_Group SET OGP_GROUP.RecordStatus = 'Imported'
FROM OGP_Group
INNER JOIN #Temp_VAEnrolmentGroup
ON OGP_Group.ID = #Temp_VAEnrolmentGroup.OGP_GroupID
WHERE OGP_Group.RecordStatus IN ('Obsolete')

--INSERT OGP_EnrolmentGroup...
INSERT OGP_GroupEnrolment (OGP_GroupID, OGP_EnrolmentID, RecordStatus)
SELECT DISTINCT
#Temp_VAEnrolmentGroup.OGP_GroupID,
OGP_Enrolment.ID AS OGP_EnrolmentID,
'Imported' AS RecordStatus
FROM
#Temp_VAEnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_VAEnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_VAEnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_VAEnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_VAEnrolmentGroup.OGP_TypeCode = 'VA'
WHERE NOT EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_VAEnrolmentGroup.OGP_GroupID AND #Temp_VAEnrolmentGroup.OGP_TypeCode = 'VA')

--Reinstate any OGP_GroupEnrolment records that were made obsolete - VA
UPDATE OGP_GroupEnrolment SET RecordStatus = 'Imported'
FROM
#Temp_VAEnrolmentGroup
INNER JOIN OGP_Enrolment
ON #Temp_VAEnrolmentGroup.CourseID = OGP_Enrolment.CourseID
AND #Temp_VAEnrolmentGroup.StudentRef = OGP_Enrolment.StudentRef
AND #Temp_VAEnrolmentGroup.AcademicYearID = OGP_Enrolment.AcademicYearID
AND #Temp_VAEnrolmentGroup.OGP_TypeCode = 'VA'
INNER JOIN OGP_GroupEnrolment
ON OGP_GroupEnrolment.OGP_GroupID = #Temp_VAEnrolmentGroup.OGP_GroupID
AND OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
WHERE EXISTS (SELECT ID FROM OGP_GroupEnrolment WHERE OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID AND OGP_GroupEnrolment.OGP_GroupID = #Temp_VAEnrolmentGroup.OGP_GroupID AND #Temp_VAEnrolmentGroup.OGP_TypeCode = 'VA')
AND OGP_GroupEnrolment.RecordStatus IN ('Obsolete')
--The OGP_EnrolmentStatus UQ of OGP_EnrolmentID, LearningAimRef, CompletionID, StartDate reflects the UQ of Enrolment, so we are OK
--Clear out the OGP_EnrolmentStatus table first, then repopulate...


INSERT OGP_EnrolmentStatus (OGP_EnrolmentID, OGP_TypeCode, LearningAimRef, CompletionID, StartDate, PlannedEndDate, ActualEndDate, Grade, OutcomeID, RecordStatus)
SELECT DISTINCT 
	OGP_Enrolment.ID AS OGP_EnrolmentID,
	'VA' AS OGP_TypeCode, --If data coming from Enrolment, it is always going to be 'VA'
	Enrolment.LearningAimRef,
	Enrolment.CompletionID,
	Enrolment.StartDate,
	Enrolment.PlannedEndDate,
	Enrolment.ActualEndDate,
	Enrolment.Grade,
	Enrolment.OutcomeID,
	'Imported' AS RecordStatus
FROM
	Enrolment
		INNER JOIN OGP_Enrolment
		ON Enrolment.CourseID = OGP_Enrolment.CourseID
		AND Enrolment.StudentRef = OGP_Enrolment.StudentRef
		AND Enrolment.AcademicYearID = OGP_Enrolment.AcademicYearID


--Now to work out the OverallCompletionID Status
--If ONE of these records is “Continuing”, TeachingGroupEnrolment.CompletionStatus = “Continuing” Else
--If ONE of these records is “Complete”, TeachingGroupEnrolment.CompletionStatus = “Complete” Else
--If ONE of these records is “Withdrawn”, TeachingGroupEnrolment.CompletionStatus = “Withdrawn” Else
--If ONE of these records is “Transferred”, TeachingGroupEnrolment.CompletionStatus = “Transferred” Else
--			End
--		End
--	End
--End

--The Enrolment OverallCompletionID should only be based on 'Imported' records.
		--Firstly Load up a series of #Temptables with a count of the completion statuses ...
		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp1 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 1 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp2 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 2 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp3 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 3 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp4 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 4 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp5 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 5 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

		SELECT OGP_EnrolmentStatus.OGP_EnrolmentID, Count(OGP_EnrolmentStatus.CompletionID) AS CountCompletion INTO #TempEnrol_Comp6 FROM OGP_EnrolmentStatus INNER JOIN OGP_Enrolment ON OGP_EnrolmentStatus.OGP_EnrolmentID = OGP_Enrolment.ID
		WHERE OGP_EnrolmentStatus.CompletionID = 6 AND OGP_EnrolmentStatus.RecordStatus = 'Imported' AND OGP_Enrolment.AcademicYearID = @AcademicYearID GROUP BY OGP_EnrolmentStatus.OGP_EnrolmentID

UPDATE OGP_Enrolment 
	SET OGP_Enrolment.OverallCompletionID = 
		(CASE WHEN CountCompletionID_1 > 0 THEN 1 ELSE --cont
			(CASE WHEN CountCompletionID_2 > 0 THEN 2 ELSE --complete
				(CASE WHEN CountCompletionID_3 > 0 THEN 3 ELSE --w/drawn
					(CASE WHEN CountCompletionID_6 > 0 THEN 6 ELSE --temp w/drawn
						(CASE WHEN CountCompletionID_4 > 0 THEN 4 ELSE --Xfer
						1
						END) -- Xfer
					END)
				END)
			END)
		END)
FROM
	OGP_Enrolment
		INNER JOIN
		(
		SELECT 
			OGP_Enrolment.ID,
			(SELECT CountCompletion FROM #TempEnrol_Comp1 WHERE #TempEnrol_Comp1.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_1,
			(SELECT CountCompletion FROM #TempEnrol_Comp2 WHERE #TempEnrol_Comp2.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_2,
			(SELECT CountCompletion FROM #TempEnrol_Comp3 WHERE #TempEnrol_Comp3.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_3,
			(SELECT CountCompletion FROM #TempEnrol_Comp4 WHERE #TempEnrol_Comp4.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_4,
			(SELECT CountCompletion FROM #TempEnrol_Comp5 WHERE #TempEnrol_Comp5.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_5,
			(SELECT CountCompletion FROM #TempEnrol_Comp6 WHERE #TempEnrol_Comp6.OGP_EnrolmentID = OGP_Enrolment.ID) AS CountCompletionID_6
		FROM
			OGP_Enrolment	
		WHERE
			OGP_Enrolment.AcademicYearID = @AcademicYearID
			AND OGP_Enrolment.RecordStatus = 'Imported'
		) t

		ON t.ID = OGP_Enrolment.ID


--Look through the "Adhoc" enrolments - i.e. ones that have been created within OneGrade rather than imported...
--For an OGP_Enrolment 'Adhoc' record, look to see if there is an OGP_Enrolment record 'Imported' for the same AcYr, Student, Course (Original).  If there is, then the Adhoc record should be given the same 
--For OGP_EnrolmentStatus Ahoc record, it should reflect the OGP_Enrolment completion status.

SELECT 
	O.ID AS ImportedEnrolmentID, --Imported ID
	O.OverallCompletionID AS ImportedCompletionID,
	OGP_Enrolment.ID AS AdhocEnrolmentID, --Adhoc ID
	OGP_Enrolment.OverallCompletionID AS AdhocCompletionID
INTO
	#Temp_Adhoc_Imported_CompletionIDs
FROM
	OGP_Enrolment INNER JOIN OGP_Enrolment O --O is Imported Imported record
	ON OGP_Enrolment.OGP_StudentID = O.OGP_StudentID
	AND O.CourseID = OGP_Enrolment.OriginalCourseID
WHERE 
	O.RecordStatus = 'Imported' AND OGP_Enrolment.RecordStatus = 'Adhoc'
	AND O.OverallCompletionID <> OGP_Enrolment.OverallCompletionID
	AND OGP_Enrolment.AcademicYearID = @AcademicYearID

--Now update the OGP_Enrolment so that the Adhoc Completion Status reflects the Imported Completion Status
UPDATE
	OGP_Enrolment
SET 
	OGP_Enrolment.OverallCompletionID = #Temp_Adhoc_Imported_CompletionIDs.ImportedCompletionID
FROM
	OGP_Enrolment INNER JOIN #Temp_Adhoc_Imported_CompletionIDs
	ON OGP_Enrolment.ID = #Temp_Adhoc_Imported_CompletionIDs.AdhocEnrolmentID

--An OGP_EnrolmentStatus record should reflect the OGP_Enrolment Record for Adhoc as well.
UPDATE
	OGP_EnrolmentStatus
SET 
	OGP_EnrolmentStatus.CompletionID = #Temp_Adhoc_Imported_CompletionIDs.ImportedCompletionID
FROM
	OGP_EnrolmentStatus INNER JOIN #Temp_Adhoc_Imported_CompletionIDs
	ON OGP_EnrolmentStatus.OGP_EnrolmentID = #Temp_Adhoc_Imported_CompletionIDs.AdhocEnrolmentID


-----------------------------------------------------------------------------------
--OGP_GroupStaff
-----------------------------------------------------------------------------------		
		INSERT 
			OGP_GroupStaff (OGP_GroupID, StaffID, RecordStatus)
		SELECT
			OGP_Group.ID,
			StaffTeachingGroup.StaffID,
			'Imported' AS RecordStatus
		FROM
			OGP_Group
				INNER JOIN StaffTeachingGroup
				ON OGP_Group.AcademicYearID = StaffTeachingGroup.AcademicYearID
				AND OGP_Group.OGP_GroupCode = StaffTeachingGroup.TeachingGroupCode
				AND OGP_Group.AcademicYearID = @AcademicYearID
		WHERE NOT EXISTS (SELECT OGP_GroupStaff.ID FROM OGP_GroupStaff INNER JOIN OGP_Group OGP_G ON OGP_GroupStaff.OGP_GroupID = OGP_G.ID WHERE OGP_GroupStaff.StaffID = StaffTeachingGroup.StaffID AND OGP_G.OGP_GroupCode = StaffTeachingGroup.TeachingGroupCode AND OGP_G.AcademicYearID = StaffTeachingGroup.AcademicYearID)

		--Reinstate any OGP_GroupStaff records that have been made obsolete
		UPDATE OGP_GroupStaff SET OGP_GroupStaff.RecordStatus = 'Imported'
		FROM  OGP_Group
				INNER JOIN StaffTeachingGroup
				ON OGP_Group.AcademicYearID = StaffTeachingGroup.AcademicYearID
				AND OGP_Group.OGP_GroupCode = StaffTeachingGroup.TeachingGroupCode
				AND OGP_Group.AcademicYearID = @AcademicYearID
				INNER JOIN OGP_GroupStaff
				ON OGP_GroupStaff.OGP_GroupID = OGP_Group.ID
				AND OGP_GroupStaff.StaffID = StaffTeachingGroup.StaffID
		WHERE EXISTS (SELECT OGP_GroupStaff.ID FROM OGP_GroupStaff INNER JOIN OGP_Group OGP_G ON OGP_GroupStaff.OGP_GroupID = OGP_G.ID WHERE OGP_GroupStaff.StaffID = StaffTeachingGroup.StaffID AND OGP_G.OGP_GroupCode = StaffTeachingGroup.TeachingGroupCode AND OGP_G.AcademicYearID = StaffTeachingGroup.AcademicYearID)
		AND OGP_GroupStaff.RecordStatus = 'Obsolete'

		INSERT 
			OGP_GroupStaff (OGP_GroupID, StaffID, RecordStatus)
		SELECT
			OGP_Group.ID,
			StaffMyGrouping.StaffID,
			'Adhoc' AS RecordStatus
		FROM
			OGP_Group
				INNER JOIN StaffMyGrouping
				ON OGP_Group.AcademicYearID = StaffMyGrouping.AcademicYearID
				AND OGP_Group.OGP_GroupCode = StaffMyGrouping.GroupingCode
				AND OGP_Group.AcademicYearID = @AcademicYearID
				AND StaffMyGrouping.MyGrouping = 'TeachingGroupCode'
		WHERE NOT EXISTS (SELECT OGP_GroupStaff.ID FROM OGP_GroupStaff INNER JOIN OGP_Group OGP_G ON OGP_GroupStaff.OGP_GroupID = OGP_G.ID WHERE OGP_GroupStaff.StaffID = StaffMyGrouping.StaffID AND OGP_G.OGP_GroupCode = StaffMyGrouping.GroupingCode AND OGP_G.AcademicYearID = StaffMyGrouping.AcademicYearID)

		--Reinstate any OGP_GroupStaff records that have been made obsolete (Adhoc)
		UPDATE OGP_GroupStaff SET OGP_GroupStaff.RecordStatus = 'Adhoc'
		FROM  OGP_Group
				INNER JOIN StaffMyGrouping
				ON OGP_Group.AcademicYearID = StaffMyGrouping.AcademicYearID
				AND OGP_Group.OGP_GroupCode = StaffMyGrouping.GroupingCode
				AND OGP_Group.AcademicYearID = @AcademicYearID
				AND StaffMyGrouping.MyGrouping = 'TeachingGroupCode'
				INNER JOIN OGP_GroupStaff
				ON OGP_GroupStaff.OGP_GroupID = OGP_Group.ID
				AND OGP_GroupStaff.StaffID = StaffMyGrouping.StaffID
		WHERE EXISTS (SELECT OGP_GroupStaff.ID FROM OGP_GroupStaff INNER JOIN OGP_Group OGP_G ON OGP_GroupStaff.OGP_GroupID = OGP_G.ID WHERE OGP_GroupStaff.StaffID = StaffMyGrouping.StaffID AND OGP_G.OGP_GroupCode = StaffMyGrouping.GroupingCode AND OGP_G.AcademicYearID = StaffMyGrouping.AcademicYearID)
		AND OGP_GroupStaff.RecordStatus = 'Obsolete'


--DECLARE @AcademicYearID VARCHAR(5)		
--SELECT @AcademicYearID = '23/24'
--Now the College Structure tables (CollegeStructure, CollegeStructureGroup)

	--SELECT FieldName
	DECLARE @FieldName AS VARCHAR(100)
	SELECT @FieldName = COALESCE(REPLACE(SystemSettingValue.SystemSettingValue,'|','.'), REPLACE(SystemSettingValue.DefaultValue,'|','.') )
	FROM SystemSettingValue WHERE SystemSettingValue.SystemSettingName = 'College Structure UDF'

	--get all the text before the .
	DECLARE @TableName AS VARCHAR(100)
	SELECT @TableName = SUBSTRING(@FieldName,0, CHARINDEX('.',@FieldName))

	--Build the SQL
	DECLARE @SQL AS VARCHAR(MAX) = ''
	DECLARE @SQLFinal AS VARCHAR(MAX) = ''

	IF @TableName = 'Course' 
	BEGIN
		SELECT @SQL = 'SELECT DISTINCT AcademicYearID, ' + @FieldName + ' FROM ' + @TableName + ' WHERE ' + @FieldName + ' IS NOT NULL AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END
	
	IF @TableName = 'Enrolment'
	BEGIN
		SELECT @SQL = 'SELECT DISTINCT AcademicYearID, ' + @FieldName + ' FROM ' + @TableName + ' WHERE ' + @FieldName + ' IS NOT NULL AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
					+ 'UNION SELECT DISTINCT AcademicYearID, EngMat' + @FieldName + ' FROM EngMat' + @TableName + ' WHERE EngMat' + @FieldName + ' IS NOT NULL AND EngMat' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END

	IF @TableName = 'EngMatEnrolment'
	BEGIN
		SELECT @SQL = 'SELECT DISTINCT AcademicYearID, ' + REPLACE(@FieldName,'EngMat','') + ' FROM ' + REPLACE(@TableName,'EngMat','') + ' WHERE ' + REPLACE(@FieldName,'EngMat','') + ' IS NOT NULL AND ' + REPLACE(@TableName,'EngMat','') + '.AcademicYearID = ''' + @AcademicYearID + ''''
					+ 'UNION SELECT DISTINCT AcademicYearID, ' + @FieldName + ' FROM ' + @TableName + ' WHERE ' + @FieldName + ' IS NOT NULL AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END


	CREATE TABLE #TempOGP_CollegeStructure (AcademicYearID VARCHAR(5) NOT NULL, CollegeStructureName VARCHAR(255) NOT NULL)
	--Put the data into a temp table
	SELECT @SQLFinal = 'INSERT #TempOGP_CollegeStructure (AcademicYearID, CollegeStructureName) ' + @SQL
	
	--SELECT @SQLFinal
	
	EXEC (@SQLFinal)
	
	--Now we have the data in a temp table, we can do a WHERE NOT EXISTS on it.
	INSERT OGP_CollegeStructure (AcademicYearID, CollegeStructureName, RecordStatus)
	SELECT AcademicYearID, CollegeStructureName, 'Imported' AS RecordStatus
	FROM #TempOGP_CollegeStructure
	WHERE NOT EXISTS (SELECT ID FROM OGP_CollegeStructure WHERE OGP_CollegeStructure.AcademicYearID = #TempOGP_CollegeStructure.AcademicYearID AND OGP_CollegeStructure.CollegeStructureName = #TempOGP_CollegeStructure.CollegeStructureName)

	UPDATE OGP_CollegeStructure
	SET OGP_CollegeStructure.RecordStatus = 'Imported'
	FROM OGP_CollegeStructure INNER JOIN #TempOGP_CollegeStructure
	ON OGP_CollegeStructure.AcademicYearID = #TempOGP_CollegeStructure.AcademicYearID
	AND OGP_CollegeStructure.CollegeStructureName = #TempOGP_CollegeStructure.CollegeStructureName
	AND OGP_CollegeStructure.RecordStatus = 'Obsolete'

	
	CREATE TABLE #Temp (TeachingGroupCode VARCHAR(50) NOT NULL, AcademicYearID VARCHAR(5) NOT NULL, CollegeStructureName VARCHAR(255) NOT NULL, OGP_TypeCode VARCHAR(30) NOT NULL, GroupID INT NULL)

	DECLARE @SQLTG_CS VARCHAR(MAX) = ''
	DECLARE @SQLTG_CS_Final VARCHAR(MAX) = ''	


	IF @TableName = 'Course' 
	BEGIN
		SELECT @SQLTG_CS = 'SELECT DISTINCT TeachingGroupCode, Enrolment.AcademicYearID, ' + @FieldName + ', ''VA'' AS OGP_TypeCode FROM ' + @TableName + ' INNER JOIN Enrolment ON Enrolment.CourseID = ' + @TableName + '.ID WHERE ' + @FieldName + ' IS NOT NULL AND LEN(ISNULL(Enrolment.TeachingGroupCode,''''))>0 ' + ' AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + '''' +
		'UNION SELECT DISTINCT TeachingGroupCode, vEngMatEnrolment.AcademicYearID, ' + @FieldName + ', vEngMatEnrolment.EngMatType FROM ' + @TableName + ' INNER JOIN vEngMatEnrolment ON vEngMatEnrolment.CourseID = ' + @TableName + '.ID WHERE ' + @FieldName + ' IS NOT NULL AND vEngMatEnrolment.EngMatType IS NOT NULL AND LEN(ISNULL(vEngMatEnrolment.TeachingGroupCode,''''))>0' + ' AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END
	
	IF @TableName = 'Enrolment'
	BEGIN
		SELECT @SQLTG_CS = 'SELECT DISTINCT TeachingGroupCode, AcademicYearID, ' + @FieldName + ', ''VA'' AS OGP_TypeCode FROM ' + @TableName + ' WHERE ' + @FieldName + ' IS NOT NULL AND LEN(ISNULL(' + @TableName + '.TeachingGroupCode,''''))>0 ' + ' AND ' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + '''' +
					+ 'UNION SELECT DISTINCT TeachingGroupCode, AcademicYearID, vEngMat' + @FieldName + ', vEngMat' + @TableName + '.EngMatType FROM vEngMat' + @TableName + ' WHERE vEngMat' + @FieldName + ' IS NOT NULL AND vEngMat' + @TableName + '.EngMatType IS NOT NULL AND LEN(ISNULL(vEngMat' + @TableName + '.TeachingGroupCode,''''))>0 ' + ' AND vEngMat' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END

	IF @TableName = 'EngMatEnrolment'
	BEGIN
		SELECT @SQLTG_CS = 'SELECT DISTINCT TeachingGroupCode, AcademicYearID, ' + REPLACE(@FieldName,'EngMat','') + ', ''VA'' AS OGP_TypeCode FROM ' + REPLACE(@TableName,'EngMat','') + ' WHERE ' + REPLACE(@FieldName,'EngMat','') + ' IS NOT NULL AND LEN(ISNULL(' + REPLACE(@FieldName,'EngMat','') + '.TeachingGroupCode,''''))>0 ' + ' AND ' + REPLACE(@TableName,'EngMat','') + '.AcademicYearID = ''' + @AcademicYearID + '''' + 
					+ 'UNION SELECT DISTINCT TeachingGroupCode, AcademicYearID, v' + @FieldName + ', v' + @TableName + '.EngMatType FROM v' + @TableName + ' WHERE v' + @FieldName + ' IS NOT NULL AND v' + @TableName + '.EngMatType IS NOT NULL AND LEN(ISNULL(v' + @TableName + '.TeachingGroupCode,''''))>0 ' + ' AND v' + @TableName + '.AcademicYearID = ''' + @AcademicYearID + ''''
	END

	SELECT @SQLTG_CS_Final = 'INSERT #Temp (TeachingGroupCode, AcademicYearID, CollegeStructureName, OGP_TypeCode) ' + @SQLTG_CS
	--SELECT @SQLTG_CS_Final
	EXEC (@SQLTG_CS_Final)

	
	--Now Get the GroupID
	UPDATE #Temp
	SET 
		GroupID = OGP_Group.ID
	FROM #Temp 
		INNER JOIN OGP_Group
		ON OGP_Group.OGP_GroupCode = #Temp.TeachingGroupCode
		AND OGP_Group.AcademicYearID = #Temp.AcademicYearID
		AND OGP_Group.OGP_TypeCode = #Temp.OGP_TypeCode
		AND #Temp.AcademicYearID = @AcademicYearID


	--INSERT into the OGP_CollegeStructureGroup table WHERE NOT already exists...
	INSERT OGP_CollegeStructureGroup(OGP_CollegeStructureID, OGP_GroupID, RecordStatus)
	SELECT OGP_CollegeStructure.ID, #Temp.GroupID, 'Imported' AS RecordStatus
	FROM #Temp
		INNER JOIN OGP_CollegeStructure
		ON #Temp.AcademicYearID = OGP_CollegeStructure.AcademicYearID
		AND #Temp.CollegeStructureName = OGP_CollegeStructure.CollegeStructureName
	WHERE NOT EXISTS (SELECT ID FROM OGP_CollegeStructureGroup WHERE OGP_CollegeStructureGroup.OGP_GroupID = #Temp.GroupID AND OGP_CollegeStructureGroup.OGP_CollegeStructureID = OGP_CollegeStructure.ID)
	AND #Temp.GroupID IS NOT NULL
	AND OGP_CollegeStructure.ID IS NOT NULL
	AND #Temp.AcademicYearID = @AcademicYearID

	--UPDATE any OGP_CollegeStructureGroup records that were obsolete that are now Imported...
	UPDATE OGP_CollegeStructureGroup SET RecordStatus = 'Imported'
	FROM #Temp
		INNER JOIN OGP_CollegeStructure
		ON #Temp.AcademicYearID = OGP_CollegeStructure.AcademicYearID
		AND #Temp.CollegeStructureName = OGP_CollegeStructure.CollegeStructureName
	WHERE EXISTS (SELECT ID FROM OGP_CollegeStructureGroup WHERE OGP_CollegeStructureGroup.OGP_GroupID = #Temp.GroupID AND OGP_CollegeStructureGroup.OGP_CollegeStructureID = OGP_CollegeStructure.ID)
	AND #Temp.GroupID IS NOT NULL
	AND OGP_CollegeStructure.ID IS NOT NULL
	AND #Temp.AcademicYearID = @AcademicYearID
	AND OGP_CollegeStructureGroup.RecordStatus = 'Obsolete'

	--INSERT into the OGP_CollegeStructureStaff table WHERE NOT already exists...
	INSERT 
		OGP_CollegeStructureStaff (OGP_CollegeStructureID, StaffID, RecordStatus)
	SELECT
		OGP_CollegeStructure.ID,
		StaffMyGrouping.StaffID,
		'Adhoc' AS RecordStatus
	FROM
		OGP_CollegeStructure
			INNER JOIN StaffMyGrouping
			ON OGP_CollegeStructure.AcademicYearID = StaffMyGrouping.AcademicYearID
			AND OGP_CollegeStructure.CollegeStructureName = StaffMyGrouping.GroupingCode
			AND OGP_CollegeStructure.AcademicYearID = @AcademicYearID
	WHERE NOT EXISTS (SELECT ID FROM OGP_CollegeStructureStaff WHERE OGP_CollegeStructureStaff.StaffID = StaffMyGrouping.StaffID AND OGP_CollegeStructureStaff.OGP_CollegeStructureID = OGP_CollegeStructure.ID)
	AND StaffMyGrouping.MyGrouping = 'CollegeStructure'

	--UPDATE any OGP_CollegeStructure records that were obsolete that are now imported...
	UPDATE OGP_CollegeStructureStaff SET RecordStatus = 'Adhoc'
	FROM
		OGP_CollegeStructure
			INNER JOIN StaffMyGrouping
			ON OGP_CollegeStructure.AcademicYearID = StaffMyGrouping.AcademicYearID
			AND OGP_CollegeStructure.CollegeStructureName = StaffMyGrouping.GroupingCode
			AND OGP_CollegeStructure.AcademicYearID = @AcademicYearID
	WHERE EXISTS (SELECT ID FROM OGP_CollegeStructureStaff WHERE OGP_CollegeStructureStaff.StaffID = StaffMyGrouping.StaffID AND OGP_CollegeStructureStaff.OGP_CollegeStructureID = OGP_CollegeStructure.ID)
	AND StaffMyGrouping.MyGrouping = 'CollegeStructure'
	AND OGP_CollegeStructure.RecordStatus = 'Obsolete'


---------------------------------------------------------------------
-------------------Clean Up Routines---------------------------------
---------------------------------------------------------------------

--Depending on the Enrolment and EngMatEnrolments, we may have Groups that don't appear in the imports any more.
--This routine clears out any Imported Groups from the OGP tables
--Check to see if we have any English Groups that need removing:UPDATE OGP_GroupEnrolment

--DECLARE @AcademicYearID AS varchar(5)
--SELECT @AcademicYearID = '22/23'

SELECT ID, OGP_GroupCode 
INTO #TempEng_GroupstoRemove
FROM OGP_Group 
WHERE AcademicYearID = @AcademicYearID and OGP_TypeCode = 'English' AND RecordStatus = 'Imported'
AND OGP_GroupCode NOT IN (SELECT DISTINCT TeachingGroupCode FROM vEngMatEnrolment WHERE AcademicYearID = @AcademicYearID and vEngMatEnrolment.EngMatType = 'English')

UPDATE OGP_GroupStaff SET OGP_GroupStaff.RecordStatus = 'Obsolete' FROM OGP_GroupStaff INNER JOIN #TempEng_GroupstoRemove ON OGP_GroupStaff.OGP_GroupID = #TempEng_GroupstoRemove.ID
UPDATE OGP_CollegeStructureGroup SET OGP_CollegeStructureGroup.RecordStatus = 'Obsolete' FROM OGP_CollegeStructureGroup INNER JOIN #TempEng_GroupstoRemove ON OGP_CollegeStructureGroup.OGP_GroupID = #TempEng_GroupstoRemove.ID
UPDATE OGP_GroupEnrolment SET OGP_GroupEnrolment.RecordStatus = 'Obsolete' FROM OGP_GroupEnrolment INNER JOIN #TempEng_GroupstoRemove ON OGP_GroupEnrolment.OGP_GroupID = #TempEng_GroupstoRemove.ID
UPDATE OGP_Group SET OGP_Group.RecordStatus = 'Obsolete' FROM OGP_Group INNER JOIN #TempEng_GroupstoRemove ON OGP_Group.ID = #TempEng_GroupstoRemove.ID


--Check to see if we have any Maths Groups that need removing:
SELECT ID, OGP_GroupCode 
INTO #TempMat_GroupstoRemove
FROM OGP_Group 
WHERE AcademicYearID = @AcademicYearID and OGP_TypeCode = 'Maths' AND RecordStatus = 'Imported'
AND OGP_GroupCode NOT IN (SELECT DISTINCT TeachingGroupCode FROM vEngMatEnrolment WHERE AcademicYearID = @AcademicYearID and vEngMatEnrolment.EngMatType = 'Maths')

UPDATE OGP_GroupStaff SET OGP_GroupStaff.RecordStatus = 'Obsolete' FROM OGP_GroupStaff INNER JOIN #TempMat_GroupstoRemove ON OGP_GroupStaff.OGP_GroupID = #TempMat_GroupstoRemove.ID
UPDATE OGP_CollegeStructureGroup SET OGP_CollegeStructureGroup.RecordStatus = 'Obsolete' FROM OGP_CollegeStructureGroup INNER JOIN #TempMat_GroupstoRemove ON OGP_CollegeStructureGroup.OGP_GroupID = #TempMat_GroupstoRemove.ID
UPDATE OGP_GroupEnrolment SET OGP_GroupEnrolment.RecordStatus = 'Obsolete' FROM OGP_GroupEnrolment INNER JOIN #TempMat_GroupstoRemove ON OGP_GroupEnrolment.OGP_GroupID = #TempMat_GroupstoRemove.ID
UPDATE OGP_Group SET OGP_Group.RecordStatus = 'Obsolete' FROM OGP_Group INNER JOIN #TempMat_GroupstoRemove ON OGP_Group.ID = #TempMat_GroupstoRemove.ID


--Check to see if we have any VA Groups that need removing:
SELECT ID, OGP_GroupCode 
INTO #TempVA_GroupstoRemove
FROM OGP_Group 
WHERE AcademicYearID = @AcademicYearID and OGP_TypeCode = 'VA' AND RecordStatus = 'Imported'
AND OGP_GroupCode NOT IN (SELECT DISTINCT TeachingGroupCode FROM vEnrolment WHERE AcademicYearID = @AcademicYearID)

UPDATE OGP_GroupStaff SET OGP_GroupStaff.RecordStatus = 'Obsolete' FROM OGP_GroupStaff INNER JOIN #TempVA_GroupstoRemove ON OGP_GroupStaff.OGP_GroupID = #TempVA_GroupstoRemove.ID
UPDATE OGP_CollegeStructureGroup SET OGP_CollegeStructureGroup.RecordStatus = 'Obsolete' FROM OGP_CollegeStructureGroup INNER JOIN #TempVA_GroupstoRemove ON OGP_CollegeStructureGroup.OGP_GroupID = #TempVA_GroupstoRemove.ID
UPDATE OGP_GroupEnrolment SET OGP_GroupEnrolment.RecordStatus = 'Obsolete' FROM OGP_GroupEnrolment INNER JOIN #TempVA_GroupstoRemove ON OGP_GroupEnrolment.OGP_GroupID = #TempVA_GroupstoRemove.ID
UPDATE OGP_Group SET OGP_Group.RecordStatus = 'Obsolete' FROM OGP_Group INNER JOIN #TempVA_GroupstoRemove ON OGP_Group.ID = #TempVA_GroupstoRemove.ID



--Find out if there are any enrolment groups that exist in the OGP_Enrolment table that don't exist in Enrolment or EngMatEnrolment
--Don't touch the Adhoc records though.
--Then set the enrolment groups to be obsolete

--Firstly, select into a #Temp table
SELECT Enrolment.AcademicYearID, StudentRef, CourseCode, TeachingGroupCode INTO #Temp_ExistingEnrolsAndGroups FROM Enrolment INNER JOIN Course C ON C.ID = Enrolment.CourseID WHERE Enrolment.AcademicYearID = @AcademicYearID
UNION SELECT EngMatEnrolment.AcademicYearID, StudentRef, CourseCode, TeachingGroupCode FROM EngMatEnrolment INNER JOIN Course C ON C.ID = EngMatEnrolment.CourseID WHERE EngMatEnrolment.AcademicYearID = @AcademicYearID

--Then find enrols who are not in the groups...
SELECT OGP_Enrolment.ID, OGP_Enrolment.AcademicYearID, StudentRef, Course.CourseCode , OGP_Group.OGP_GroupCode, OGP_GroupEnrolment.ID AS OGP_GroupEnrolmentID
INTO #Temp_OGP_Enrolments_NotIn_Enrolment_EngMatEnrolment
FROM OGP_Enrolment
INNER JOIN Course ON OGP_Enrolment.OriginalCourseID = Course.ID
INNER JOIN OGP_GroupEnrolment ON OGP_Enrolment.ID = OGP_GroupEnrolment.OGP_EnrolmentID
INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
AND Course.ID = OGP_Group.CourseID
WHERE OGP_Enrolment.AcademicYearID = @AcademicYearID 

AND NOT EXISTS (SELECT t.AcademicYearID, t.StudentRef, t.CourseCode, t.TeachingGroupCode
					FROM
					(SELECT AcademicYearID, StudentRef, CourseCode, TeachingGroupCode FROM #Temp_ExistingEnrolsAndGroups) t
					WHERE OGP_Enrolment.AcademicYearID = t.AcademicYearID
					AND OGP_Enrolment.StudentRef = t.StudentRef
					AND Course.CourseCode = t.CourseCode
					AND OGP_Group.OGP_GroupCode = t.TeachingGroupCode)
AND OGP_Enrolment.RecordStatus <> 'Adhoc'



UPDATE OGP_GroupEnrolment SET OGP_GroupEnrolment.RecordStatus = 'Obsolete' FROM OGP_GroupEnrolment 	
	INNER JOIN #Temp_OGP_Enrolments_NotIn_Enrolment_EngMatEnrolment
	ON OGP_GroupEnrolment.OGP_EnrolmentID = #Temp_OGP_Enrolments_NotIn_Enrolment_EngMatEnrolment.ID
	AND OGP_GroupEnrolment.ID = #Temp_OGP_Enrolments_NotIn_Enrolment_EngMatEnrolment.OGP_GroupEnrolmentID

--Find out if there are any enrolments that exist in the OGP_Enrolment table that don't exist in Enrolment or EngMatEnrolment
--Don't touch the Adhoc records though.
--Then set the enrolments to be obsolete

--Firstly, select into a #Temp table
SELECT Enrolment.AcademicYearID, StudentRef, CourseCode INTO #Temp_ExistingEnrols FROM Enrolment INNER JOIN Course C ON C.ID = Enrolment.CourseID WHERE Enrolment.AcademicYearID = @AcademicYearID
UNION SELECT EngMatEnrolment.AcademicYearID, StudentRef, CourseCode FROM EngMatEnrolment INNER JOIN Course C ON C.ID = EngMatEnrolment.CourseID WHERE EngMatEnrolment.AcademicYearID = @AcademicYearID

----Then find enrols who are not on the courses...
SELECT OGP_Enrolment.ID, OGP_Enrolment.AcademicYearID, StudentRef, Course.CourseCode
INTO #Temp_OGP_EnrolmentsOnly_NotIn_Enrolment_EngMatEnrolment
FROM OGP_Enrolment
INNER JOIN Course ON OGP_Enrolment.OriginalCourseID = Course.ID
WHERE OGP_Enrolment.AcademicYearID = @AcademicYearID 

AND NOT EXISTS (SELECT t.AcademicYearID, t.StudentRef, t.CourseCode
					FROM
					(SELECT AcademicYearID, StudentRef, CourseCode FROM #Temp_ExistingEnrols) t
					WHERE OGP_Enrolment.AcademicYearID = t.AcademicYearID
					AND OGP_Enrolment.StudentRef = t.StudentRef
					AND Course.CourseCode = t.CourseCode
					)
AND OGP_Enrolment.RecordStatus <> 'Adhoc'



UPDATE OGP_EnrolmentStatus SET OGP_EnrolmentStatus.RecordStatus = 'Obsolete' FROM OGP_EnrolmentStatus 	
	INNER JOIN #Temp_OGP_EnrolmentsOnly_NotIn_Enrolment_EngMatEnrolment
	ON OGP_EnrolmentStatus.OGP_EnrolmentID = #Temp_OGP_EnrolmentsOnly_NotIn_Enrolment_EngMatEnrolment.ID

UPDATE OGP_Enrolment SET OGP_Enrolment.RecordStatus = 'Obsolete' FROM OGP_Enrolment 	
	INNER JOIN #Temp_OGP_EnrolmentsOnly_NotIn_Enrolment_EngMatEnrolment
	ON OGP_Enrolment.ID = #Temp_OGP_EnrolmentsOnly_NotIn_Enrolment_EngMatEnrolment.ID


--Now remove any Students from OGP_Student if they don't exist in Student or EngMatStudent
SELECT OGP_Student.ID, OGP_Student.AcademicYearID, StudentRef
INTO #Temp_OGP_Students_NotIn_Student_EngMatStudent
FROM OGP_Student
WHERE OGP_Student.AcademicYearID = @AcademicYearID
AND NOT EXISTS (SELECT t.AcademicYearID, t.StudentRef
					FROM
						(SELECT Student.AcademicYearID, StudentRef FROM Student WHERE Student.AcademicYearID = @AcademicYearID
						UNION SELECT EngMatStudent.AcademicYearID, StudentRef FROM EngMatStudent WHERE EngMatStudent.AcademicYearID = @AcademicYearID) t
					WHERE OGP_Student.AcademicYearID = t.AcademicYearID
					AND OGP_Student.StudentRef = t.StudentRef)

UPDATE OGP_Student SET OGP_Student.RecordStatus = 'Obsolete' FROM OGP_Student 
	INNER JOIN #Temp_OGP_Students_NotIn_Student_EngMatStudent
	ON OGP_Student.ID = #Temp_OGP_Students_NotIn_Student_EngMatStudent.ID

--All the College Structures that do exist will be in #TempOGP_CollegeStructure

SELECT 
	OGP_CollegeStructure.ID, OGP_CollegeStructure.CollegeStructureName
INTO #Temp_OGP_CollegeStructure_Obsolete
FROM 
	OGP_CollegeStructure
WHERE 
	OGP_CollegeStructure.AcademicYearID = @AcademicYearID
	AND NOT EXISTS (SELECT #TempOGP_CollegeStructure.* FROM #TempOGP_CollegeStructure
					WHERE #TempOGP_CollegeStructure.CollegeStructureName = OGP_CollegeStructure.CollegeStructureName
					AND #TempOGP_CollegeStructure.AcademicYearID = OGP_CollegeStructure.AcademicYearID)

UPDATE OGP_CollegeStructureGroup SET OGP_CollegeStructureGroup.RecordStatus = 'Obsolete' FROM OGP_CollegeStructureGroup
	INNER JOIN #Temp_OGP_CollegeStructure_Obsolete
	ON OGP_CollegeStructureGroup.OGP_CollegeStructureID = #Temp_OGP_CollegeStructure_Obsolete.ID
  
  UPDATE OGP_CollegeStructureStaff SET OGP_CollegeStructureStaff.RecordStatus = 'Obsolete' FROM OGP_CollegeStructureStaff
	INNER JOIN #Temp_OGP_CollegeStructure_Obsolete
	ON OGP_CollegeStructureStaff.OGP_CollegeStructureID = #Temp_OGP_CollegeStructure_Obsolete.ID

  UPDATE OGP_CollegeStructure SET OGP_CollegeStructure.RecordStatus = 'Obsolete' FROM OGP_CollegeStructure
	INNER JOIN #Temp_OGP_CollegeStructure_Obsolete
	ON OGP_CollegeStructure.ID = #Temp_OGP_CollegeStructure_Obsolete.ID


--If there are any Groups that belong to CollegeStructures that are no longer valid because they are no longer in the Enrolment or EngMatEnrolment tables
UPDATE OGP_CollegeStructureGroup
SET OGP_CollegeStructureGroup.RecordStatus = 'Obsolete'
FROM OGP_CollegeStructureGroup
INNER JOIN OGP_Group ON  OGP_CollegeStructureGroup.OGP_GroupID = OGP_group.ID
AND OGP_Group.AcademicYearID = @AcademicYearID
WHERE NOT EXISTS (	SELECT 
					#Temp.GroupID, OGP_CollegeStructure.ID 
					FROM #Temp 
						INNER JOIN OGP_CollegeStructure ON #Temp.CollegeStructureName = OGP_CollegeStructure.CollegeStructureName
					WHERE #Temp.AcademicYearID = @AcademicYearID
					AND OGP_CollegeStructureGroup.OGP_GroupID = #Temp.GroupID
					AND OGP_CollegeStructureGroup.OGP_CollegeStructureID = OGP_CollegeStructure.ID
				)
AND OGP_CollegeStructureGroup.RecordStatus <> 'Adhoc' --don't touch the adhoc Group-College structure relationships



--Are there any OGP_Group_Enrolment records that belong to Adhoc Groups that have obsolete enrolment records attached

SELECT OGP_GroupEnrolment.ID
INTO #TempGroupEnrols_tobemadeObsolete
FROM OGP_GroupEnrolment 
INNER JOIN OGP_Group
ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
INNER JOIN OGP_Enrolment
ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
AND OGP_Group.RecordStatus = 'Adhoc'
AND OGP_Enrolment.RecordStatus = 'Obsolete'

UPDATE OGP_GroupEnrolment SET RecordStatus = 'Obsolete'
FROM OGP_GroupEnrolment
INNER JOIN #TempGroupEnrols_tobemadeObsolete
ON OGP_GroupEnrolment.ID = #TempGroupEnrols_tobemadeObsolete.ID


----Are there any obsolete OGP_GroupEnrolments in Adhoc Groups that need reinstating
SELECT OGP_GroupEnrolment.ID
INTO #TempGroupEnrols_toreinstate
FROM OGP_GroupEnrolment 
INNER JOIN OGP_Group
ON OGP_GroupEnrolment.OGP_GroupID = OGP_Group.ID
INNER JOIN OGP_Enrolment
ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
AND OGP_Group.RecordStatus = 'Adhoc'
AND OGP_Enrolment.RecordStatus = 'Imported'
AND OGP_Enrolment.OriginalCourseID <> OGP_Enrolment.CourseID ---Only do where the OrigCourseID and CourseID are NOT the same (if they are equal we dont need an enrolgrp rec)

UPDATE OGP_GroupEnrolment SET RecordStatus = 'Adhoc'
FROM OGP_GroupEnrolment
INNER JOIN #TempGroupEnrols_toreinstate
ON OGP_GroupEnrolment.ID = #TempGroupEnrols_toreinstate.ID


--If there are any child records for Adhoc Groups in OGP_CollegeStructureGroup that have been reinstated, make sure the status is Adhoc.
UPDATE OGP_CollegeStructureGroup SET RecordStatus = 'Adhoc'
FROM OGP_CollegeStructureGroup
INNER JOIN OGP_Group
ON OGP_CollegeStructureGroup.OGP_GroupID = OGP_Group.ID
WHERE OGP_Group.RecordStatus = 'Adhoc'
AND OGP_CollegeStructureGroup.RecordStatus = 'Imported'




GO



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [sp_WebPlus_TeachingGroupStudents_Update]
@AcademicYearID VARCHAR(5),
@StaffId        INTEGER,
@GroupId        INTEGER,
@StudentIDs     VARCHAR(max)
AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 23/3/2023 v1.0.0
-- Modified:    AndyB 19/9/2023 Retrieved CompletionID from OGP_Enrolment (requested by AndyG)
-- Modified:	AndyG 20/01/2024 When checking or populating OGP_Enrolment, use @GroupCourseID instead of @EnrolmentCourseID
-- Modified:	AndyG 23/01/2024 Ensure that the correct RecordStatus is used for OGP_GroupEnrolment.
-- Descripton:	SP to update the Students assigned to a particular group ID. Students Assigned are passed in as a comma delimited string
-- Example:     exec  sp_WebPlus_TeachingGroupStudents_Update 7, 1047, '9,11,12'
-- =============================================

DECLARE @newID             INT;
DECLARE @GroupCourseID     INT;
DECLARE @EnrolmentCourseID INT;
DECLARE @RecordStatus      VARCHAR(30);
DECLARE @GroupTypeCode     VARCHAR(30);

DECLARE @OGP_EnrolmentID  INT;
DECLARE @OGP_StudentID    INT;
DECLARE @StudentRef       VARCHAR(20); 
DECLARE @OriginalCourseID INT;
DECLARE @CompletionID     INT;

--check if Group Code already exists
IF EXISTS 
	(SELECT 1 FROM OGP_Group WHERE ID = @GroupId) 
BEGIN

	--delete any existing rows for the group
	DELETE FROM OGP_GroupEnrolment  WHERE OGP_GroupID = @GroupId;

	--get the details of the target Group
	SELECT 
		@RecordStatus  = RecordStatus,
		@GroupCourseID = CourseID,
		@GroupTypeCode = OGP_TypeCode
	FROM 
		OGP_Group 
	WHERE 
		ID = @GroupId;

	--SET @RecordStatus = (SELECT RecordStatus FROM OGP_Group WHERE ID = @GroupId); 
	--SET @CourseID = (SELECT CourseID FROM OGP_Group WHERE ID = @GroupId); 
	--SET @GroupType = (SELECT OGP_TypeCode FROM OGP_Group WHERE ID = @GroupId); 

	IF @StudentIDs <> ''
	BEGIN
		--string must end with a ,
		IF @StudentIDs NOT LIKE '%,'
		BEGIN
			SET @StudentIDs = @StudentIDs + ',';
		END

		DECLARE @tokId NVARCHAR(255)
		DECLARE @pos INT

		WHILE DATALENGTH(@StudentIDs) > 0     
		BEGIN
			IF @StudentIDs <> ''
			BEGIN
				--get the Student EnrolmentID
				SELECT @pos  = CHARINDEX(',', @StudentIDs)  
				SELECT @tokId = SUBSTRING(@StudentIDs, 1, @pos-1)

				Print 'Processing StudentID=';
				Print @tokId;

				--get the Student details 
				SELECT
					@OGP_EnrolmentID   = ID,
					@OGP_StudentID     = OGP_StudentID,
					@StudentRef        = StudentRef,
					@OriginalCourseID  = OriginalCourseID,
					@EnrolmentCourseID = CourseID,
					@CompletionID      = OverallCompletionID
				FROM
					OGP_Enrolment
				WHERE
					OGP_Enrolment.ID = @tokId;

				--get the Student details 
				SELECT
					@OGP_EnrolmentID   = ID,
					@OGP_StudentID     = OGP_StudentID,
					@StudentRef        = StudentRef,
					@OriginalCourseID  = OriginalCourseID,
					@EnrolmentCourseID = CourseID,
					@CompletionID      = OverallCompletionID
				FROM
					OGP_Enrolment
				WHERE
					OGP_Enrolment.ID = @tokId;

				--Check if the OGP_Enrolment already exists
				IF EXISTS (SELECT ID FROM OGP_Enrolment WHERE OGP_Enrolment.OGP_StudentID = @OGP_StudentID AND OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/)
				BEGIN
					SELECT @OGP_EnrolmentID = ID FROM OGP_Enrolment WHERE OGP_Enrolment.OGP_StudentID = @OGP_StudentID AND OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/;
				END
				ELSE
				BEGIN
					--Populate OGP_Enrolment record WHERE NOT EXISTS
					INSERT 
						OGP_Enrolment(AcademicYearID, OGP_StudentID, CourseID, OriginalCourseID, StudentRef, OverallCompletionID, RecordStatus)
					SELECT 
						@AcademicYearID, @OGP_StudentID, @GroupCourseID/*@EnrolmentCourseID*/, @OriginalCourseID, @StudentRef, @CompletionID, 'Adhoc' 
					WHERE NOT EXISTS 
						(SELECT ID 
						 FROM   OGP_Enrolment 
						 WHERE  OGP_Enrolment.OGP_StudentID = @OGP_StudentID 
						 AND    OGP_Enrolment.CourseID = @GroupCourseID/*@EnrolmentCourseID*/);

					SELECT @OGP_EnrolmentID = SCOPE_IDENTITY();
				END

				Print 'Processing OGP_EnrolmentID=';
				Print @OGP_EnrolmentID;
				
				DECLARE @Status AS VARCHAR(10)
				SELECT @Status = 'Adhoc'
				 --If enrolment is added where the courseid=origcourseid, then it is an Adhoc Enrol (i.e. adding into this group from the same course as this group)
				 --if enrolment is added where the courseid=origcourseid and the enrolment is on the same group in the Enrolment/EngMatEnrol tables, it needs to be Status "Imported"
				 --(this can happen if the student was added to adhoc group, then MIS formally move student to the group in MIS)
				DECLARE @OGP_GroupCode AS VARCHAR(50)
				SELECT @OGP_GroupCode = OGP_GroupCode FROM OGP_Group WHERE OGP_TypeCode = @GroupTypeCode AND CourseID = @GroupCourseID AND ID = @GroupId

				--IF (SELECT COUNT(*) FROM OGP_Enrolment WHERE CourseID = OriginalCourseID AND ID = @OGP_EnrolmentID) = 1 
				--BEGIN
				--	SELECT @Status = 'Adhoc'
				--END

				IF ((SELECT Count(*) FROM OGP_Enrolment WHERE CourseID = OriginalCourseID AND ID = @OGP_EnrolmentID) = 1
					AND (
						SELECT Count(ID) FROM (
								SELECT Enrolment.ID FROM Enrolment INNER JOIN OGP_Enrolment ON Enrolment.AcademicYearID = OGP_Enrolment.AcademicYearID
								AND Enrolment.StudentRef = OGP_Enrolment.StudentRef AND Enrolment.CourseID = @GroupCourseID AND Enrolment.TeachingGroupCode = @OGP_GroupCode
								AND Enrolment.AcademicYearID = @AcademicYearID AND Enrolment.StudentRef = @StudentRef
								UNION SELECT EngMatEnrolment.ID FROM EngMatEnrolment INNER JOIN OGP_Enrolment ON EngMatEnrolment.AcademicYearID = OGP_Enrolment.AcademicYearID
								AND EngMatEnrolment.StudentRef = OGP_Enrolment.StudentRef AND EngMatEnrolment.CourseID = @GroupCourseID AND EngMatEnrolment.TeachingGroupCode = @OGP_GroupCode
								AND EngMatEnrolment.AcademicYearID = @AcademicYearID AND EngMatEnrolment.StudentRef = @StudentRef
											)t
						) = 1
					)
				BEGIN
					SELECT @Status = 'Imported'
				END

				BEGIN
					--Populate OGP_GroupEnrolment for this enrolment
					INSERT 
						OGP_GroupEnrolment(OGP_GroupID, OGP_EnrolmentID, RecordStatus)
					SELECT 
						@GroupId, @OGP_EnrolmentID, @Status AS RecordStatus
					WHERE NOT EXISTS 
						(SELECT ID 
						 FROM   OGP_GroupEnrolment 
						 WHERE  OGP_GroupEnrolment.OGP_GroupID = @GroupId 
						 AND    OGP_GroupEnrolment.OGP_EnrolmentID = @OGP_EnrolmentID);

				--Populate OGP_EnrolmentStatus record WHERE NOT EXISTS for this enrolment
				INSERT 
					OGP_EnrolmentStatus (OGP_EnrolmentID, OGP_TypeCode, CompletionID, StartDate, RecordStatus)
				SELECT 
					@OGP_EnrolmentID, @GroupTypeCode, 1 AS CompletionID, GetDate() AS StartDate, 'Adhoc' AS RecordStatus
				WHERE NOT EXISTS 
					(SELECT ID 
					 FROM   OGP_EnrolmentStatus 
					 WHERE  OGP_EnrolmentStatus.OGP_EnrolmentID = @OGP_EnrolmentID 
					 AND    OGP_EnrolmentStatus.OGP_TypeCode = @GroupTypeCode AND OGP_EnrolmentStatus.RecordStatus = 'Adhoc');
				END
				--get the rest of the IDs to process
				SELECT @StudentIDs = SUBSTRING(@StudentIDs, @pos+1, LEN(@StudentIDs)-@pos);
			END
			ELSE
			BEGIN
				SET @StudentIDs = '';
			END
		END
	END

		--INSERT INTO AuditTrail 
		--	(AuditDate, AuditBy, AuditChange, TableName, RowID, RowDescription, FieldName, OldValue, NewValue, OldValueDescription, NewValueDescription)
		--VALUES
		--	(1,2,3,4,5,6,7,8,9,0)

	--return 1 for success
	SELECT 1;

END
ELSE
BEGIN
    --GroupID doesnt exist so return -1
	SELECT -1;
END

GO




SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_WebPlus_EnrolmentStudents_Select]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[sp_WebPlus_EnrolmentStudents_Select] AS' 
END
GO




ALTER PROCEDURE [dbo].[sp_WebPlus_EnrolmentStudents_Select]
@AcademicYearID  VARCHAR(5),
@GroupType       VARCHAR(30),         -- VA English Maths or 'All' (which means include all types)
@SearchType      VARCHAR(11),         -- STUDENTNAME STUDENTREF COURSE or GROUP
@SearchValue     VARCHAR(50)          -- the value to search for

AS
-- =============================================
-- Author:		Andrew Breward
-- Create date: AndyB 23/03/2023 v1.0.0
-- Modified:    AndyB 04/10/2023 Changed the join on Course to OGP_Enrolment.CourseID = Course.ID
-- Descripton:	SP to find Stduents for different criteria
-- Example:     exec sp_WebPlus_EnrolmentStudents_Select '22/23', 'STUDENTNAME', 'Cart'
-- Modified:	17/11/2023 AMG
-- Modified:    24/01/2024 AndyB Added distinct and removed Group details (to stop duplicates being returned)
-- Description:	Performance issue with the WHERE EXISTS part of the query, so split the main part into #Temp and tested EXISTS on the #Temp.  Improved perfomance from 20secs to 1 sec.
-- =============================================

IF @SearchType = 'STUDENTNAME' 
BEGIN

	SELECT distinct
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS EnrolmentID, 
		OGP_Student.StudentRef AS StudentRef, 
		OGP_Student.Surname, 
		OGP_Student.Forenames, 
		OGP_Student.DOB,
		Completion.Description AS CompletionDescription,
		OGP_Enrolment.StudentRef AS  EnrolmentStudentRef, OGP_Enrolment.OGP_StudentID,
		OGP_Enrolment.CourseID AS EnrolmentCourseID, OGP_Enrolment.OriginalCourseID, OGP_Group.CourseID AS GroupCourseID, Course.CourseCode, Course.Title AS CourseTitle,
		OGP_Group.OGP_TypeCode AS GroupTypeCode --OGP_GroupEnrolment.OGP_GroupID AS GroupID, OGP_Group.OGP_TypeCode AS GroupTypeCode, OGP_Group.OGP_GroupCode AS GroupCode, OGP_Group.OGP_GroupTitle AS GroupTitle
	INTO #Temp1
	FROM 
		OGP_Enrolment 
			INNER JOIN Course on OGP_Enrolment.CourseID = Course.ID
			INNER JOIN Completion ON Completion.ID = OGP_Enrolment.OverallCompletionID
			INNER JOIN OGP_Student ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					--INNER JOIn Course on OGP_Group.CourseID = Course.ID
	WHERE
		(OGP_Enrolment.AcademicYearID = @AcademicYearID)
	AND
		(OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID)   -- we only want Imported
	AND
		(OGP_Enrolment.RecordStatus = 'Imported')                   -- we only want Imported
	AND 
		(@GroupType = 'ALL' OR @GroupType = OGP_Group.OGP_TypeCode)
	AND	
		(OGP_Student.Surname IS NOT NULL AND OGP_Student.Surname like '%' + @SearchValue + '%')
	
	-- removed this so we can filter on the UI
	--AND
	--	(OGP_Enrolment.OverallCompletionID IN (1,2))   -- only completion or continuing
	
	-- this is to ensure the Student has the associated Grade record
	SELECT 
		*
	FROM 
		#Temp1
	WHERE EXISTS
		(SELECT 1 FROM EstActVA WHERE StudentRef = #Temp1.StudentRef AND EstActVA.AcademicYearID = @AcademicYearID
		 UNION
		 SELECT 1 FROM EngMat_Enrolment_InYear WHERE StudentRef = #Temp1.StudentRef AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID)  
	
	ORDER BY 4,5,3;   -- order by Surname, Forename, StudentRef   

END
ELSE IF @SearchType = 'STUDENTREF' 
BEGIN

	SELECT distinct
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS EnrolmentID, 
		OGP_Student.StudentRef AS StudentRef, 
		OGP_Student.Surname, 
		OGP_Student.Forenames, 
		OGP_Student.DOB,
		Completion.Description AS CompletionDescription,
		OGP_Enrolment.StudentRef AS  EnrolmentStudentRef, OGP_Enrolment.OGP_StudentID,
		OGP_Enrolment.CourseID AS EnrolmentCourseID, OGP_Enrolment.OriginalCourseID, OGP_Group.CourseID AS GroupCourseID, Course.CourseCode, Course.Title AS CourseTitle,
		OGP_Group.OGP_TypeCode AS GroupTypeCode --OGP_GroupEnrolment.OGP_GroupID AS GroupID, OGP_Group.OGP_TypeCode AS GroupTypeCode, OGP_Group.OGP_GroupCode AS GroupCode, OGP_Group.OGP_GroupTitle AS GroupTitle
	INTO #Temp2
	FROM 
		OGP_Enrolment 
			INNER JOIN Course on OGP_Enrolment.CourseID = Course.ID
			INNER JOIN Completion ON Completion.ID = OGP_Enrolment.OverallCompletionID
			INNER JOIN OGP_Student ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					--INNER JOIn Course on OGP_Group.CourseID = Course.ID
	WHERE
		(OGP_Enrolment.AcademicYearID = @AcademicYearID)
	AND
		(OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID)   -- we only want Imported
	AND
		(OGP_Enrolment.RecordStatus = 'Imported')                   -- we only want Imported
	AND 
		(@GroupType = 'ALL' OR @GroupType = OGP_Group.OGP_TypeCode)
	AND	
		(OGP_Student.Surname IS NOT NULL AND OGP_Student.StudentRef like '%' + @SearchValue + '%')
	
	-- removed this so we can filter on the UI
	--AND
	--	(OGP_Enrolment.OverallCompletionID IN (1,2))   -- only completion or continuing

	-- this is to ensure the Student has the associated Grade record
	SELECT 
		*
	FROM 
		#Temp2
	WHERE EXISTS
		(SELECT 1 FROM EstActVA WHERE StudentRef = #Temp2.StudentRef AND EstActVA.AcademicYearID = @AcademicYearID
		 UNION
		 SELECT 1 FROM EngMat_Enrolment_InYear WHERE StudentRef = #Temp2.StudentRef AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID)  
	ORDER BY 4,5,3;   -- order by Surname, Forename, StudentRef   

END
ELSE IF @SearchType = 'GROUP' 
BEGIN

	SELECT distinct
		OGP_Enrolment.AcademicYearID,
		OGP_Enrolment.ID AS EnrolmentID, 
		OGP_Student.StudentRef AS StudentRef, 
		OGP_Student.Surname, 
		OGP_Student.Forenames, 
		OGP_Student.DOB,
		Completion.Description AS CompletionDescription,
		OGP_Enrolment.StudentRef AS  EnrolmentStudentRef, OGP_Enrolment.OGP_StudentID,
		OGP_Enrolment.CourseID AS EnrolmentCourseID, OGP_Enrolment.OriginalCourseID, OGP_Group.CourseID AS GroupCourseID, Course.CourseCode, Course.Title AS CourseTitle,
		OGP_Group.OGP_TypeCode AS GroupTypeCode --OGP_GroupEnrolment.OGP_GroupID AS GroupID, OGP_Group.OGP_TypeCode AS GroupTypeCode, OGP_Group.OGP_GroupCode AS GroupCode, OGP_Group.OGP_GroupTitle AS GroupTitle
	INTO #Temp3
	FROM 
		OGP_Enrolment
			INNER JOIN Course on OGP_Enrolment.CourseID = Course.ID
			INNER JOIN Completion ON Completion.ID = OGP_Enrolment.OverallCompletionID
			INNER JOIN OGP_Student ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					--INNER JOIn Course on OGP_Group.CourseID = Course.ID
	WHERE
		(OGP_Enrolment.AcademicYearID = @AcademicYearID)
	AND
		(OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID)   -- we only want Imported
	AND
		(OGP_Enrolment.RecordStatus = 'Imported')                   -- we only want Imported
	AND 
		(@GroupType = 'ALL' OR @GroupType = OGP_Group.OGP_TypeCode)
	AND	
		(OGP_Group.OGP_GroupCode = @SearchValue)

	-- removed this so we can filter on the UI
	--AND
	--	(OGP_Enrolment.OverallCompletionID IN (1,2))   -- only completion or continuing
	
	-- this is to ensure the Student has the associated Grade record
	SELECT 
		*
	FROM 
		#Temp3
	WHERE EXISTS
		(SELECT 1 FROM EstActVA WHERE StudentRef = #Temp3.StudentRef AND EstActVA.AcademicYearID = @AcademicYearID
		 UNION
		 SELECT 1 FROM EngMat_Enrolment_InYear WHERE StudentRef = #Temp3.StudentRef AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID)  
	ORDER BY 4,5,3;   -- order by Surname, Forename, StudentRef   

END
ELSE IF @SearchType = 'COURSE' 
BEGIN

	SELECT distinct
		OGP_Enrolment.AcademicYearID, 
		OGP_Enrolment.ID AS EnrolmentID, 
		OGP_Student.StudentRef AS StudentRef, 
		OGP_Student.Surname, 
		OGP_Student.Forenames, 
		OGP_Student.DOB,
		Completion.Description AS CompletionDescription,
		OGP_Enrolment.StudentRef AS  EnrolmentStudentRef, OGP_Enrolment.OGP_StudentID,
		OGP_Enrolment.CourseID AS EnrolmentCourseID, OGP_Enrolment.OriginalCourseID, OGP_Group.CourseID AS GroupCourseID, Course.CourseCode, Course.Title AS CourseTitle,
		OGP_Group.OGP_TypeCode AS GroupTypeCode --OGP_GroupEnrolment.OGP_GroupID AS GroupID, OGP_Group.OGP_TypeCode AS GroupTypeCode, OGP_Group.OGP_GroupCode AS GroupCode, OGP_Group.OGP_GroupTitle AS GroupTitle
	INTO
		#Temp4
	FROM 
		OGP_Enrolment 
			INNER JOIN Course on OGP_Enrolment.CourseID = Course.ID
			INNER JOIN Completion ON Completion.ID = OGP_Enrolment.OverallCompletionID
			INNER JOIN OGP_Student ON OGP_Student.ID = OGP_Enrolment.OGP_StudentID
			INNER JOIN OGP_GroupEnrolment ON OGP_GroupEnrolment.OGP_EnrolmentID = OGP_Enrolment.ID
				INNER JOIN OGP_Group ON OGP_Group.ID = OGP_GroupEnrolment.OGP_GroupID
					--INNER JOIn Course on OGP_Group.CourseID = Course.ID
	WHERE
		(OGP_Enrolment.AcademicYearID = @AcademicYearID)
	AND
		(OGP_Enrolment.CourseID = OGP_Enrolment.OriginalCourseID)   -- we only want Imported
	AND
		(OGP_Enrolment.RecordStatus = 'Imported')                   -- we only want Imported
	AND 
		(@GroupType = 'ALL' OR @GroupType = OGP_Group.OGP_TypeCode)
	AND	
		(Course.CourseCode = @SearchValue)
	
	-- removed this so we can filter on the UI
	--AND
	--	(OGP_Enrolment.OverallCompletionID IN (1,2))   -- only completion or continuing
	
	-- this is to ensure the Student has the associated Grade record
	SELECT 
		*
	FROM 
		#Temp4
	WHERE EXISTS
		(SELECT 1 FROM EstActVA WHERE StudentRef = #Temp4.StudentRef AND EstActVA.AcademicYearID = @AcademicYearID
		 UNION
		 SELECT 1 FROM EngMat_Enrolment_InYear WHERE StudentRef = #Temp4.StudentRef AND EngMat_Enrolment_InYear.AcademicYearID = @AcademicYearID)  
	ORDER BY 4,5,3;   -- order by Surname, Forename, StudentRef   

END

GO

